solr中有两个文本字段,它们都是空白标记的,并且都有小写筛选器。以下是模式:
<fieldType name="text_ac" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="field1" type="text_ac" indexed="true" stored="true" required="false" omitNorms="true" default=""/>
<field name="field2" type="text_ac" indexed="true" stored="true" required="false" omitNorms="true" default=""/>如何查询solr返回查询时field1的整个字符串与field2相同的结果(field1==field2)?
谢谢。
发布于 2013-04-30 04:45:12
如何正确查询两个字段的相等性,请参考Nicholas DiPiazza's answer
由于问题指定比较两个文本(即被分析的)字段的完整内容,我认为这不适用于函数查询等,因此有两种方法:
field1和field2,则创建一个字段1_equals_2,并使用true对其进行索引,前提是它们在添加文档时进行了比较。然后,您可以简单地搜索1_equals_2:true.发布于 2019-10-10 11:01:21
方法1- frange解析器
正如@dduo所提到的,您可以使用https://lucene.apache.org/solr/guide/6_6/other-parsers.html#OtherParsers-FunctionRangeQueryParser。下面是Trey Grainger ( Solr in Action的作者之一)所说的方法:
q=*:*&fq={!frange l=1 u=1 v=$equals}&equals=if(eq(field1,field2),1,0)我对此进行了测试,它适用于一个包含1.4亿个文档的集合,查询时间约为10秒,结果集中有600,000个文档。
所以这是可行的,但是有点慢。
方法2-使用流表达式
下面的表达式似乎可以完成我们在这里要做的事情:
having(search(your_collection_name, q="*:*", sort="id asc"), eq(field1, field2))这似乎更有性能,因为它返回即时结果。因此,如果你可以使用流表达式,这可能是一种更快的方式来获得你正在寻找的东西。
发布于 2014-03-14 22:40:19
你有没有试过'strdist‘函数和'frange’范围查询?像这样的范围查询将会有所帮助:
{!frange l=1 u=1}字符串(field1,field2,编辑)
https://stackoverflow.com/questions/16258605
复制相似问题