我在我的Spring MVC项目中使用hibernate-search,我想完成一些事情,但我不确定它是否可行。这是问题所在:
我正在使用 NGramFilterFactoryClass 并已配置 minGramSize = 3 和 maxGramSize = 3 。
假设我的搜索字词为“关键字”
如果我输入这样的内容:
"ywo", "key", "ord", "blablaordblabla"
查询将返回“关键字”。这很好,我理解这是如何工作的,但我想做的是当我输入类似的东西:
"bkey", "blablaordblabla"
我不想返回“关键字”。只有当搜索字词类似于:
时,才应返回“关键字”"key", "ord", "ywo", "eywo", "word" etc...
所以,我想我正在寻找'%like%'类型的查询。如何使用hinernate-search实现此目的?
答案 0 :(得分:1)
我不知道你是否正在寻找,但也许你需要所谓的“通配符查询”。
尝试查看this link作为参考。 另请查看this stackoverflow topic
答案 1 :(得分:1)
如果您使用NGrams分析您的输入,您将无法执行完全“赞%”查询。 您可能需要一个 SimpleAnalyzer 或类似的东西,它不能完全破坏您的关键字,或者您可能希望跳过此字段的分析并按原样对其进行索引。
然后将其与WildCard查询结合使用;请注意example in the reference docs如何使用关键字元素来构建查询,该查询本身会在输入上禁用分析器。 (确保向下滚动文档中的通配符查询部分。)
我假设您正在使用NGrams,因为您需要它们用于其他用例。请记住,您可以使用@Fields批注以各种不同的方式索引相同的属性,因此您可以使用ngrams索引它,也可以使用另一种更适合通配符查询的形式。