【问题标题】:Is it possible to make lucene.net ignore case of the field for queries?是否可以让 lucene.net 忽略查询字段的大小写?
【发布时间】:2014-04-08 23:01:03
【问题描述】:

我有用“GuidId”字段和“guidid”字段索引的文档。如何让 lucene net 忽略大小写...以便以下查询搜索不考虑大小写?

TermQuery termQuery = new TermQuery(new Term("GuidId", guidId.ToString()));

我不想为带有“guidid”字段的文档编写另一个查询..即小写

【问题讨论】:

    标签: lucene.net lucene


    【解决方案1】:

    理想情况下,不要有带有时髦案例的字段名称。如果您正在动态定义字段名称或类似的名称,那么您应该在将它们添加到索引之前将它们小写。完成后,将查询字段的名称也保持小写应该很容易,并且您的状态很好。

    如果出于某种原因,您遇到了这种区分大小写的数据,您将无法扩展查询以搜索字段名称的所有已知排列以获得所有结果。比如:

    Query finalQuery = new DisjunctionMaxQuery(0)
    finalQuery.add(new TermQuery(new Term("GuidId", guidId.ToString())));
    finalQuery.add(new TermQuery(new Term("guidid", guidId.ToString())));
    

    DisjunctionMaxQuery 在这里可能是一个不错的选择,因为它只返回查询集合中的最大得分命中,而不是可能在多个命中中复合得分。

    您也可以使用MultiFieldQueryParser 来达到类似的效果。我不相信它使用 DisjunctionMax,但在这种情况下听起来可能没什么大不了的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2015-07-18
      • 2020-04-25
      • 2011-03-23
      相关资源
      最近更新 更多