2017-05-11 16 views
0

私は電子商取引ウェブサイトのための弾性検索ベースの自動完成モジュールを作成する予定です。私は提案のためにedge_ngramを使用しています。この設定を試しています。弾性検索のオートコンプリート

**My index creation :** 

PUT my_index 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "autocomplete": { 
      "tokenizer": "autocomplete", 
      "filter": [ 
      "lowercase" 
      ] 
     }, 
     "autocomplete_search": { 
      "tokenizer": "lowercase" 
     } 
     }, 
     "tokenizer": { 
     "autocomplete": { 
      "type": "edge_ngram", 
      "min_gram": 1, 
      "max_gram": 10, 
      "token_chars": [ 
      "letter","digit" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "doc": { 
     "properties": { 
     "title": { 
      "type": "text", 
      "analyzer": "autocomplete", 
      "search_analyzer": "autocomplete_search" 
     } 
     } 
    } 
    } 
} 

**Inserting Data** 

PUT my_index/doc/1 
{ 
    "title": "iphone s" 
} 

PUT my_index/doc/9 
{ 
    "title": "iphone ka" 
} 

PUT my_index/doc/11 
{ 
    "title": "iphone ka t" 
} 

PUT my_index/doc/15 
{ 
    "title": "iphone 6" 
} 

PUT my_index/doc/14 
{ 
    "title": "iphone 6 16GB" 
} 

PUT my_index/doc/3 
{ 
    "title": "iphone k" 
} 

POST my_index/_refresh 

POST my_index/_analyze 
{ 
    "tokenizer": "autocomplete", 
    "text": "iphone 6" 
} 

POST my_index/_analyze 
{ 
    "analyzer": "pattern", 
    "text": "iphone 6" 
} 

**Autocomplete suggestions** 
When i am trying to find out closets match to iphone 6.It is not showing correct result. 

GET my_index/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "iphone 6", 
     "operator": "and" 
     } 
    } 
    } 
} 


**Above query yielding :** 
{ 
    "took": 0, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 7, 
    "max_score": 0.28582606, 
    "hits": [ 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "1", 
     "_score": 0.28582606, 
     "_source": { 
      "title": "iphone s" 
     } 
     }, 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "9", 
     "_score": 0.25811607, 
     "_source": { 
      "title": "iphone ka" 
     } 
     }, 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "14", 
     "_score": 0.24257512, 
     "_source": { 
      "title": "iphone 6 16GB" 
     } 
     }, 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "3", 
     "_score": 0.19100356, 
     "_source": { 
      "title": "iphone k" 
     } 
     }, 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "15", 
     "_score": 0.1862728, 
     "_source": { 
      "title": "iphone 6" 
     } 
     }, 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "11", 
     "_score": 0.16358379, 
     "_source": { 
      "title": "iphone ka t" 
     } 
     }, 
     { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "2", 
     "_score": 0.15861572, 
     "_source": { 
      "title": "iphone 5 s" 
     } 
     } 
    ] 
    } 
} 

しかし、結果は次のようになります。

 { 
     "_index": "my_index", 
     "_type": "doc", 
     "_id": "15", 
     "_score": 1, 
     "_source": { 
      "title": "iphone 6" 
     } 
     } 

私はこの上で何かをしないのです場合は私に知らせてください、私は良い結果をもたらすことがあり、他の方法のこのように認識していないに新しいです。

答えて

1

あなたはsearch_analyzerとしてautocomplete_searchを使用しています。あなたが指定した検索アナライザを使用してテキストがどのように分析されているかを調べると、

POST my_index/_analyze 
{ 
"analyzer": "autocomplete_search", 
"text": "iphone 6" 
} 

すべての文書がreverse indexにこの(iphone)トークンを持っているので、あなたは

{ 
"tokens": [ 
    { 
    "token": "iphone",   ===> Only one token 
    "start_offset": 0, 
    "end_offset": 6, 
    "type": "word", 
    "position": 0 
    } 
    ] 
} 

を取得します。したがって、すべての文書が返されます

希望の結果を一致させたい場合は、インデックス作成時に使用したアナライザを使用することができます。

{ 
"query": { 
"match": { 
    "title": { 
    "query": "iphone 6", 
    "operator": "and", 
    "analyzer" : "autocomplete" 
    } 
    } 
} 
} 
+0

希望の結果を得る方法をお知らせください。 –

+0

私の答えを編集しました。それがあなたの必要条件に合っているかどうかを見てください – Richa

+0

help.Furthermoreのためにありがとう私はthis.Canでこれ以上のフレーズsuggesterを使用する必要がありますか?私はユーザーがipone 5を入力し、iphone 5を提案した場合に修正したい。 –