2017-07-17 5 views
0

私は以下のデータを持つタイトルを含むインデックスを持っています。elasticsearchで正確に単語の一致が開始されましたか?

  1. ジャムパン
  2. jamun
  3. ジャマイカ国

ジャムのためのユーザーを検索した場合ので、私は、検索結果に来るもjamunジャマイカの国にをしたくありません。今私はelasticsearchのプレフィックスクエリを使用していますが、私が望むように私に結果を与えていません。

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

答えて

0

結果の両方が一致するように、プレフィックスクエリは、実際に転置インデックスに正規表現のクエリを実行(keyword*)のようにして、結果の両方を取得します。

トークン化されたキーワードと完全に一致させるには、プレフィックスクエリの代わりにterm queryを使用します。

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

はい、その場合は、そのすべてがトップに最も関連性が高いということです。 「フルーツジャム」は用語クエリごとに一致する必要がありますが、その順序は「jam」または「jam brown」よりも低くする必要があります。 – 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

"apple"、 "apple iphone"、 "apple iphone 6"などのように "apple iphone 6"のような順序でデータをインデックスする方法はありますか? –

+0

@LijoAbrahamでは、任意の順序でデータをインデックスできます。弾性検索クエリは、[アプリケーション、appl、apple、apple i、apple iphone、apple iphone 6]のように入力するとデータ検索を返します。 –

+0

単語ngramsだけが必要です。 「appl」または「i」ではない –

関連する問題