首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否查询两个字段相等的单据?

是否查询两个字段相等的单据?
EN

Stack Overflow用户
提问于 2013-04-28 09:24:50
回答 3查看 7.4K关注 0票数 4

solr中有两个文本字段,它们都是空白标记的,并且都有小写筛选器。以下是模式:

代码语言:javascript
运行
复制
<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)?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-04-30 04:45:12

如何正确查询两个字段的相等性,请参考Nicholas DiPiazza's answer

由于问题指定比较两个文本(即被分析的)字段的完整内容,我认为这不适用于函数查询等,因此有两种方法:

  • 重新考虑您正在尝试做的事情,或者更改索引结构。这些应该是字符串而不是文本吗?如果是,则如上所述,请参阅此处Nicholas DiPiazza's answer.
  • (Original Answer )。完成此操作的简单方法是在索引时执行比较,并将结果存储在索引中。也就是说,如果您有field1field2,则创建一个字段1_equals_2,并使用true对其进行索引,前提是它们在添加文档时进行了比较。然后,您可以简单地搜索1_equals_2:true.
票数 11
EN

Stack Overflow用户

发布于 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的作者之一)所说的方法:

代码语言:javascript
运行
复制
q=*:*&fq={!frange l=1 u=1 v=$equals}&equals=if(eq(field1,field2),1,0)

我对此进行了测试,它适用于一个包含1.4亿个文档的集合,查询时间约为10秒,结果集中有600,000个文档。

所以这是可行的,但是有点慢。

方法2-使用流表达式

下面的表达式似乎可以完成我们在这里要做的事情:

代码语言:javascript
运行
复制
having(search(your_collection_name, q="*:*", sort="id asc"), eq(field1, field2))

这似乎更有性能,因为它返回即时结果。因此,如果你可以使用流表达式,这可能是一种更快的方式来获得你正在寻找的东西。

票数 7
EN

Stack Overflow用户

发布于 2014-03-14 22:40:19

你有没有试过'strdist‘函数和'frange’范围查询?像这样的范围查询将会有所帮助:

{!frange l=1 u=1}字符串(field1,field2,编辑)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16258605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档