2016-08-16 16 views
1

elasticsearch同義語私は、検索しようとしているテキストがelasticsearch(トップ3)によって返された結果である、2 marina blvdです:私の同義語の一覧で期待通りに動作していない

2 MARINA GREEN, SINGAPORE 019800 
MARINA BAYFRONT 2 RAFFLES LINK, SINGAPORE 039392 
THE SAIL @ MARINA BAY 2 MARINA BOULEVARD, SINGAPORE 018987 

blvdboulevardと同じです。私は2 marina blvdを検索する場合

、私は2 marina blvd2 marina boulevardに等しいので、このTHE SAIL @ MARINA BAY 2 MARINA BOULEVARD, SINGAPORE 018987は、最高得点でトップに1つになります期待しています。しかし、今は2 MARINA GREEN, SINGAPORE 019800が一番上にあります。

何が問題になりましたか?検索結果を改善するにはどうすればよいですか?

{ 
    "geolocation": { 
    "settings": { 
     "index": { 
     "creation_date": "1471322099847", 
     "analysis": { 
      "filter": { 
      "my_synonym_filter": { 
       "type": "synonym", 
       "synonyms": [ 
       "rd,road", 
       "ave,avenue", 
       "blvd,boulevard", 
       "st,street", 
       "lor,lorong", 
       "ter,terminal", 
       "blk,block", 
       "apt,apartment", 
       "condo,condominium" 
       ] 
      } 
      }, 
      "analyzer": { 
      "my_synonyms": { 
       "filter": [ 
       "lowercase", 
       "my_synonym_filter" 
       ], 
       "tokenizer": "standard" 
      }, 
      "stopwords_analyzer": { 
       "type": "standard", 
       "stopwords": [ 
       "the" 
       ] 
      }, 
      "my_ngram_analyzer": { 
       "tokenizer": "my_ngram_tokenizer" 
      } 
      }, 
      "tokenizer": { 
      "my_ngram_tokenizer": { 
       "token_chars": [ 
       "letter", 
       "digit" 
       ], 
       "min_gram": "2", 
       "type": "nGram", 
       "max_gram": "5" 
      } 
      } 
     }, 
     "number_of_shards": "5", 
     "number_of_replicas": "1", 
     "uuid": "mPfZmWHFQZOHqfAi471nGQ", 
     "version": { 
      "created": "2030599" 
     } 
     } 
    } 
    } 
} 

そして、これは、クエリ

body: { 
     from : 0, size : 10, 
     query: { 
     bool: { 
      should: [ 
      { 
       match: { 
       text: q 
       } 
      }, 
      { 
       match: { 
       text: { 
        query: q, 
        fuzziness: 1, 
        prefix_length: 0, 
        max_expansions: 100 
       } 
       } 
      }, 
      { 
       match: { 
       text: { 
        query: q, 
        max_expansions: 300, 
        type: "phrase_prefix" 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 

され、マッピングは次のとおりです:

フル設定がある

{ 
    "geolocation": { 
    "mappings": { 
     "location": { 
     "properties": { 
      "address": { 
      "type": "string" 
      }, 
      "blk": { 
      "type": "string" 
      }, 
      "building": { 
      "type": "string" 
      }, 
      "location": { 
      "type": "geo_point" 
      }, 
      "postalCode": { 
      "type": "string" 
      }, 
      "road": { 
      "type": "string" 
      }, 
      "searchText": { 
      "type": "string" 
      }, 
      "x": { 
      "type": "string" 
      }, 
      "y": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 
+0

どのようなクエリですか? –

+0

そして 'text'フィールドのマッピングを –

+0

@AndreiStefanに更新してください – Timeless

答えて

1

あなたはアナライザ定義されていますが、任意に設定していませんあなたのフィールドのためのそれらの。 最も基本的な設定は次のようになります。

"searchText": { 
    "type": "string", 
    "analyzer":"my_synon‌​yms" 
} 

1つのフィールドには、検索時にインデックス作成時間と一対一アナライザを持つことができます。ほとんどのユースケースでは、通常、インデックス作成および検索時に同じアナライザが使用されます。既定("analyzer": "whatever_analyzer"‌​を使用している場合)では、同じアナライザが検索およびインデックス作成の際に使用されます。

分析の詳細とできることについては、 https://www.elastic.co/guide/en/elasticsearch/guide/2.x/analysis-intro.htmlにお問い合わせください。

+0

シノニム、音韻、ストップワード、ngramのフィルタを1つのフィールドに1つのフィールドのみのフィルタを使用して適用するにはどうすればよいですか? – Timeless

関連する問題