我在实体字段上方有StandardAnalyser
@Field(name = "myField", index = Index.YES, analyze = Analyze.YES, analyzer = @Analyzer(impl = StandardAnalyzer.class)),
但是我不知道该如何实现:
1)通过类似以下内容的词进行搜索:我喜欢香蕉-> [“ I”,“ like”,“ bananas”](分析仪当前允许我这样做)
2)通过精确的输入进行搜索:“我喜欢香蕉”->“我喜欢香蕉”(StandardAnalyser不允许,并且适合的更改是impl = KeywordAnalyser)
我应该基于输入(如果它以双引号开头和结尾)更改分析器,或者更改为Java代码,更改搜索方式吗?
致谢
答案 0 :(得分:0)
也许您想查询短语?词组查询会查找一系列标记,而不只是一个标记。
Query luceneQuery = queryBuilder.phrase()
.onField("myField")
.sentence("I like bananas")
.createQuery();
请参见https://docs.jboss.org/hibernate/search/5.11/reference/en-US/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
可用之前重新索引数据。