2014-05-23 241 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