繁体   English   中英

Hibernate搜索和Elastic Search分析器进行精确搜索

[英]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)

然后,您可以根据需要将myFieldmyField_exact为查询时间。

当然,在myField_exact可用之前,您需要重新索引数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM