[英]Hibernate search and elastic search analysers for exact search
我在实体字段上方有StandardAnalyser
@Field(name = "myField", index = Index.YES, analyze = Analyze.YES, analyzer = @Analyzer(impl = StandardAnalyzer.class)),
但是我不知道如何才能做到:
1)通过类似以下内容的单词进行搜索:我喜欢香蕉-> [“ I”,“ like”,“ bananas”](分析仪当前允许我这样做)
2)通过确切的输入进行搜索:“我喜欢香蕉”->“我喜欢香蕉”(StandardAnalyser不允许,并且适合的更改是impl = KeywordAnalyser)
我应该基于输入(如果它以双引号开头和结尾)更改分析器,或者更改为Java代码,则更改搜索方式吗?
问候
也许您想查询短语? 词组查询查找一系列标记,而不只是一个标记。
Query luceneQuery = queryBuilder.phrase()
.onField("myField")
.sentence("I like bananas")
.createQuery();
参见https://docs.jboss.org/hibernate/search/5.11/reference/zh-CN/html_single/#_phrase_queries
短语查询仍然有点“模糊”,因为分析器仍然参与其中:大小写将被忽略,等等。它只是在寻找一系列(已分析的)标记。
如果您确实需要精确的搜索(包括区分大小写),则只需声明两个字段即可:
@Field(name = "myField", index = Index.YES, analyze = Analyze.YES, analyzer = @Analyzer(impl = StandardAnalyzer.class))
@Field(name = "myField_exact", index = Index.YES, analyze = Analyze.NO)
然后,您可以根据需要将myField
或myField_exact
为查询时间。
当然,在myField_exact
可用之前,您需要重新索引数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.