2017-07-17 89 views
0

我有一個索引包含字段標題有數據如下。在elasticsearch中使用精確的單詞匹配開始?

  1. 果醬麪包
  2. jamun
  3. 牙買加國家

因此,如果用戶搜索果醬,我不想jamun牙買加國家也都在搜索結果。現在,我在elasticsearch中使用前綴查詢,但它不會根據我的需要給出結果。

{ 
    "query": { 
    "prefix" : { "title" : "jam" } 
    } 
} 

回答

0

你會得到兩個結果作爲前綴查詢居然就倒排索引運行的正則表達式查詢(keyword*)所以無論結果將匹配。

您可以執行類似以下操作並使用term query而不是前綴查詢來對tokenized關鍵字執行完全匹配。

PUT exact_index1 
{ 
    "mappings": { 
    "document_type" : { 
     "properties": { 
     "title" : { 
      "type": "text" 
     } 
     } 
    } 
    } 
} 

POST exact_index1/document_type 
{ 
    "title" : "jamun" 
} 

POST exact_index1/_search 
{ 
    "query": { 
    "term": { 
     "title": { 
     "value": "jam" 
     } 
    } 
    } 
} 

希望這有助於

+0

但是,它也將獲取類似「果醬」也響應數據。我想要以確切的單詞堵塞開始的結果。 –

+0

是的,在這種情況下,最重要的就是獲得最相關的信息。 「果醬」應按照術語查詢進行匹配,但其順序應低於「果醬」或「果醬褐色」。 – user3775217

0

完成建議者提供搜索作爲你型功能

PUT - index_name/document_type/_mapping 
{ 
"document_type": { 
    "properties": { 
     "title": { 
      "type": "text" 
     }, 
     "suggest": { 
      "type": "completion", 
      "analyzer": "simple", 
      "search_analyzer": "simple" 
     } 
     } 
    } 
} 

POST - index_name/document_type 
{ 
    "name": "jamun", 
    "suggest": 
    { 
     "input": "jamun" 
    }, 
    "output": "jamun" 
} 

POST - index_name/document_type/_suggest?pretty 

{"type-suggest":{"text":"jam","completion":{"field":"suggest"}}} 
+0

有沒有什麼辦法可以按照以下順序將數據以「蘋果iphone 6」的數據作爲「蘋果」,「蘋果iphone」,「蘋果iphone 6」使用木瓦或其他東西? –

+0

@LijoAbraham你可以以任何順序對數據進行索引。彈性搜索查詢返回數據搜索,就像你輸入[app,appl,apple,apple i,apple iphone,apple iphone 6] –

+0

我只需要單詞ngrams。不是「appl」或「我」 –