2017-07-10 30 views
0

我在單個字段上使用Elasticsearch中的完成建議器。該類型包含多個用戶的文檔。有沒有辦法將返回的建議限制爲與特定查詢匹配的文檔?如何在有限的文檔集上運行Elasticsearch完成建議器查詢

我目前使用此查詢:

{ 
    "name" : { 
    "text" : "Peter", 
    "completion" : { 
     "field" : "name_suggest" 
    } 
    } 
} 

有沒有辦法這個查詢與一個不同的,例如結合

{ 
    "query":{ 
     "term" : { 
      "user_id" : "590c5bd2819c3e225c990b48" 
     } 
    } 
} 

回答

1

看一看的context suggester,這僅僅是一個專業的完成建議者與過濾功能 - 但是這仍然不是一個常規的查詢過濾器,只要記住這一點。

0

您可以指定查詢和查詢的建議者,這樣的:

{ 
    "query":{ 
     "term" : { 
      "user_id" : "590c5bd2819c3e225c990b48" 
     } 
    }, 
    "suggest": { 
     "name" : { 
      "text" : "Peter", 
      "completion" : { 
       "field" : "name_suggest" 
      } 
     } 
    } 
} 
+0

此查詢還返回包含文檔的結果,該文檔沒有匹配的user_id字段。 – Joba

0

我有一個類似用途的情況下,我已經張貼了我的彈性搜索論壇的問題,請參見here

從我至今讀,我不認爲與完成建議者,你可以限制文件。它們在索引時基本上創建了一個有限狀態轉換器(前綴樹),這使得它變得很快,但是失去了在其他字段上過濾的靈活性。我不認爲情境提示程序會在你的情況下工作(讓我知道如果我錯了),因爲user_id的基數非常高。

我認爲edge-ngrams的部分匹配更靈活,可能實際上在您的用例中起作用。

讓我知道你最終實現了什麼。

+0

我實際上跟@alr建議的上下文建議。我正在爲少量用戶構建服務,併爲每個用戶提供許多文檔,因此上下文建議人員應該可以正常工作。 – Joba

相關問題