[英]How to search a full phrase along with single terms using Hibernate Lucene?
之前,我們的搜索方式類似於“父親David Azrael”。 它返回所有帶有“父親”或“大衛”或“阿茲雷爾”的結果名稱。
以下是圖片中的代碼:
String[] FIELDS = { "id", "person.firstName", "person.middleName", "person.lastName" };
for (String field : FIELDS) {
for (String match : pattern) {
bool.should(qb.keyword().wildcard().onField(field).matching(match).createQuery());
}
}
query = bool.createQuery();
除了上述情況外,現在還有其他要求,即最終用戶要搜索“父親David Azrael”; 他應該只會得到一個結果。
意味着如果我們搜索“父親David Azrael”; 那么僅應顯示具有該名稱的結果,但如果用戶搜索“父親阿茲雷爾”,則該結果應可立即使用。
那么,為了實現相同的功能,需要對上述代碼進行哪些更改?
您可以使用短語查詢,如文檔的5.1.2.4部分所示:
bool.should(qb
.phrase()
.onField(field)
.sentence("Father David Azrael")
.createQuery());
我不知道您對“父親大衛·阿茲雷爾”和“父親·阿茲雷爾”的區別對待是什么意思,所以我不會在那部分發表評論,但這就是您創建短語查詢的方式。 您可以將詞組與現有的通配符查詢結合起來,方法是將兩者都添加到布爾查詢中以獲取兩組結果,而詞組匹配通常會獲得最高分。 或者,您可以先運行短語查詢,然后在沒有結果的情況下退回到通配符查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.