【问题标题】:Lucene phase query case insensitiveLucene 阶段查询不区分大小写
【发布时间】:2014-04-23 20:18:29
【问题描述】:

我正在编写一个查询来对“城市”字段进行完全匹配。字段/属性定义为:

@org.hibernate.search.annotations.Field(index = Index.YES, analyze = Analyze.NO, store = Store.NO)
private String city;

如果我有“New York”的值,我想在用户输入“new york”或大小写变体时找到匹配项。我正在为实体使用 StandardAnalyzer,所以我知道这会将所有标记都小写。我没有标记,因为我想匹配短语 (Analyze.NO)。

我尝试将搜索值小写,但没有成功。

Query query = qb.phrase().onField(.....).sentence(location.toLowerCase()).createQuery();

如果我不小写搜索词并且值为“纽约”,则返回结果。搜索“纽约”不会返回任何结果。

如果我标记化 (Analyze.YES),则返回其他城市,如“新泽西”。我知道我可以使用通配符查询 (searchTerm*),但我希望能够对短语进行不区分大小写的搜索。只是不确定这是否可能,除非您使用通配符。

谢谢

【问题讨论】:

    标签: lucene hibernate-search


    【解决方案1】:

    听起来您想使用一个分析器,它将整个文本作为单个标记发出,同时小写输入。在这种情况下,您需要使用analyze=Analyze.YES,同时使用analyzer=@Analyzer(impl=your.fully.qualified.Analyzer.class) 指定适当的分析器(答案here 的代码看起来像您需要的那样)。

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多