2014-05-23 242 views
1

E.g,当我使用这个DSL用于搜索:Hibernate的关键词搜索

Query query = queryBuilder.keyword().onField("person").matching("man").createQuery(); 

我想要的结果只包括现场person一字一句man,而结果就像He is a man在球场上。我能怎么做?

有人有线索? Thx

回答

1

这不是自由文本搜索的工作方式。如果搜索词匹配并且只有一个词,则不能说它只应匹配。自由文本搜索引擎的要点是在给定的文本语料库中查找匹配。如果你的现场人员包含一次“人”,并且一旦“他是一个人”,你会得到一个匹配(除非你指定未分析的领域)。差异在于得分。

+0

这么多的回应。但是我不能对未经分析的领域编制索引。 U表示不同之处在于分数,你能给我一个例子来根据分数过滤结果吗? – Stephan

+0

或者我可以使用动态过滤器来控制结果的长度?(如果我搜索“man”,结果的长度应该是3) – Stephan

1

在你的情况下,我会坚持使用标准的Hibernate查询(在HQL中它会类似于from MyClass mc where mc.person = "man")。您可以找到有关HQL的更多信息here

如果HQL不是一个选项,请考虑使用JPA标准API。

正如@Hardy在他的回答中提到的,您的用例与全文搜索方法不匹配。

+0

然后可以使用JPA标准api? –

+0

对于一些限制,我不能在我的项目中使用HQL。我在执行Hibernate搜索查询后为结果编写了一个过滤器。 Ty为您的回应。* – Stephan