簡體   English   中英

如何使用Apache Lucene在頂部獲得准確的搜索結果?

[英]How to get exact search results on top using Apache Lucene?

如何使用Apache Lucene獲得最佳成績搜索?

1. State Authority
2. Authority State

現在用戶搜索“ Authority State”或“ State Authority”,以上兩種方式我們都得到相同的結果。 但對於“授權狀態”,搜索結果應為

1. Authority State
2. State Authority

以下是對字段的lucene查詢:

name:Authority State* 
name:Authority State
name:Authority*
name:State*

for (String field : INDEXED_FIELDS) {
           bool.should(qb.keyword().wildcard().onField(field).matching(userInputBuilder.toString()).createQuery());
        }

        for (String field : INDEXED_FIELDS) {
          for (String match : pattern) {
               bool.should(qb.keyword().onField(field).matching(match).createQuery());
          }
        }

沒有對結果的排序。

有人可以建議如何獲得准確的結果嗎?

關鍵字查詢類型只是看起來與輸入的相同標記匹配,而沒有考慮順序。

當您需要考慮詞組中標記的順序時,請使用詞組查詢:

Query query = queryBuilder
                .phrase()
                    .withSlop( 2 )//or other options of the Phrase query
                    .onField( field )
                    .sentence( userInputBuilder.toString() )
                .createQuery();

您可能還對嘗試使用最新的“簡單查詢生成器”感興趣。

如果您有興趣“調試”分數,則查詢引擎不僅可以輸出結果,還可以輸出分數和用於每次匹配的評估公式:

List<Object[]> results = (List<Object[]>) fullTextSession
    .createFullTextQuery( mltQuery, Coffee.class )
    .setProjection( ProjectionConstants.THIS, ProjectionConstants.SCORE, ProjectionConstants.EXPLANATION )
    .list();

對於每次匹配,這將為您提供三個元素的數組:

  1. 匹配的實體實例
  2. 得分值
  3. 解釋其得分方式的字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM