2017-08-17 13 views
0

現在、multi_matchを使用して、特定のフィールドと正確に一致するElasticSearchが必要です。ElasticSearchは特定のフィールドを正確に一致させますが、他のフィールドは一致しません。

たとえば、ユーザーはlong beach chiropractorと入力します。

long beachに市区町村と正確に一致させ、seal beachまたはglass beachの結果を返しません。

chiropractorchiropracticと一致する必要があります。ここで

は、私が使用している現在のクエリです:

"query": { 
    "bool": { 
     "should": [ 
      { 
       "multi_match": { 
           "fields": [ 
            "title", 
            "location_address_address_1.value", 
            "location_address_city.value^2", 
            "location_address_state.value", 
            "specialty" // e.g. chiropractor 
           ], 
           "query": "chiropractor long beach", 
           "boost": 6, 
           "type": "cross_fields" 
       } 
      } 
     ] 
    } 
}, 

答えて

1

正しいアプローチは、キーワードの種類として検索される用語と場所、およびストアの場所を分離することです。これが不可能な場合は、シノニムtokenizerを使用して単一のトークンとして格納することができますが、これにはすべての可能な場所のリストが必要です。例えば今、あなたが呼び出す場合

{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "my_synonym_filter": { 
      "type": "synonym", 
      "synonyms": [ 
      "long beach=>long-beach" 
      ] 
     } 
     }, 
     "analyzer": { 
     "my_synonyms": { 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "my_synonym_filter" 
      ] 
     } 
     } 
    } 
    } 
} 

POST /my_index/_analyze?analyzer=my_synonyms  
{ 
    "text": ["chiropractor long beach"] 
} 

応答が

{ 
    "tokens": [ 
     { 
      "token": "chiropractor", 
      "start_offset": 0, 
      "end_offset": 12, 
      "type": "<ALPHANUM>", 
      "position": 0 
     }, 
     { 
      "token": "long-beach", 
      "start_offset": 13, 
      "end_offset": 23, 
      "type": "SYNONYM", 
      "position": 1 
     } 
    ] 
} 
です
関連する問題