Lucene阶段查询不区分大小写

时间:2014-04-23 20:18:29

标签: lucene hibernate-search

我正在编写一个查询,以便在“城市”中进行完全匹配。领域。字段/属性定义为:

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

如果我拥有"纽约"的价值,我想找到一个匹配,如果用户输入" new york"或某些案例的变体。我正在使用StandardAnalyzer作为实体,所以我知道将小写所有令牌。我没有标记,因为我想匹配短语(Analyze.NO)。

我试图小写我的搜索值,但没有运气。

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

如果我不小写搜索字词且值为“纽约”,则会返回结果。正在寻找纽约'不会返回任何结果。

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

谢谢

1 个答案:

答案 0 :(得分:2)

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