我正在编写一个查询,以便在“城市”中进行完全匹配。领域。字段/属性定义为:
@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 *),但我希望能够对短语进行不区分大小写的搜索。除非你使用通配符,否则不确定是否可行。
谢谢
答案 0 :(得分:2)
听起来你会想要使用一个分析器,它将整个文本作为单个标记发出,同时降低输入的输入。在这种情况下,您需要使用analyze=Analyze.YES
,同时使用analyzer=@Analyzer(impl=your.fully.qualified.Analyzer.class)
指定相应的分析器(答案here的代码看起来与您的需要相似)。