2016-06-30 1 views
1

クエリ時に同義語アナライザーを使用しようとしましたが、期待した結果が得られません。誰かがこれにいくつかの光を投げることができますか?ここでいくつかのマルチワード同義語は、ネストされたフィールドのelasticsearchで機能しません。

は、インデックスのための私のマッピングです:

{ 
    "jobs_user_profile_v2": { 
    "mappings": { 
     "profile": { 
     "_all": { 
      "enabled": false 
     }, 
     "_ttl": { 
      "enabled": true 
     }, 
     "properties": { 

      "rsa": { 
      "type": "nested", 
      "properties": { 
       "answer": { 
       "type": "string", 
       "index_analyzer": "autocomplete", 
       "search_analyzer": "synonym", 
       "position_offset_gap": 100 
       }, 
       "answerId": { 
       "type": "long" 
       }, 
       "answerOriginal": { 
       "type": "string", 
       "index": "not_analyzed" 
       }, 
       "createdAt": { 
       "type": "long" 
       }, 
       "label": { 
       "type": "string", 
       "index": "not_analyzed" 
       }, 
       "labelOriginal": { 
       "type": "string", 
       "index": "not_analyzed" 
       }, 
       "question": { 
       "type": "string", 
       "index": "not_analyzed" 
       }, 
       "questionId": { 
       "type": "long" 
       }, 
       "questionOriginal": { 
       "type": "string" 
       }, 
       "source": { 
       "type": "integer" 
       }, 
       "updatedAt": { 
       "type": "long" 
       } 
      } 
      } 

     } 
     } 
    } 
    } 
} 

分野に集中するために、私は照会していますフィールドである、rsa.answerです。

私の同義語マッピング:

Beautician,Stylist,Make up artist,Massage therapist,Therapist,Spa,Hair Dresser,Salon,Beauty Parlour,Parlor => Beautician 
Carpenter,Wood Worker,Furniture Carpenter => Carpenter 
Cashier,Store Manager,Store Incharge,Purchase Executive,Billing Executive,Billing Boy => Cashier 
Content Writer,Writer,Translator,Writing,Copywriter,Content Creation,Script Writer,Freelance Writer,Freelance Content Writer => Content Writer 

マイ検索クエリ:

http://{{domain}}/jobs_user_profile_v2/_search 

{ 
    "query": { 
     "nested":{ 
      "path": "rsa", 
      "query":{ 
    "query_string": { 
     "query": "hair dresser", 
     "fields": ["answer"], 
     "analyzer" :"synonym" 



    } 
    }, 
    "inner_hits": { 
      "explain": true 
     } 

    } 
    }, 
    "explain" : true, 
    "sort" : [ { 
    "_score" : { } 
    } ] 
} 

それが表示されているキャッシャー」Beautician適切とprofiles for search queryヘアードレッサーand課金エグゼクティブbut not showing anything forウッドワーカー=>大工`ケース。

マイ解析結果:

http://{{domain}}/jobs_user_profile_v2/_analyze?analyzer=synonym&text=hair dresser 


{ 
    "tokens": [ 
    { 
     "token": "beautician", 
     "start_offset": 0, 
     "end_offset": 12, 
     "type": "SYNONYM", 
     "position": 1 
    } 
    ] 
} 

wood worker case

http://{{domain}}/jobs_user_profile_v2/_analyze?analyzer=synonym&text=wood worker 


{ 
    "tokens": [ 
    { 
     "token": "carpenter", 
     "start_offset": 0, 
     "end_offset": 11, 
     "type": "SYNONYM", 
     "position": 1 
    } 
    ] 
} 

ためには、それはまた、いくつかの他の例を働いていません。インデックスの設定

マイアナライザ一multi-matchはクエリ文字列よりも理想的であるような場合について

"analysis": { 
      "filter": { 
      "synonym": { 
       "ignore_case": "true", 
       "type": "synonym", 
       "synonyms_path": "synonym.txt" 
      }, 
      "autocomplete_filter": { 
       "type": "edge_ngram", 
       "min_gram": "3", 
       "max_gram": "10" 
      } 
      }, 
      "analyzer": { 
      "text_en_splitting_search": { 
       "type": "custom", 
       "filter": [ 
       "stop", 
       "lowercase", 
       "porter_stem", 
       "word_delimiter" 
       ], 
       "tokenizer": "whitespace" 
      }, 
      "synonym": { 
       "filter": [ 
       "stop", 
       "lowercase", 
       "synonym" 
       ], 
       "type": "custom", 
       "tokenizer": "standard" 
      }, 
      "autocomplete": { 
       "filter": [ 
       "lowercase", 
       "autocomplete_filter" 
       ], 
       "type": "custom", 
       "tokenizer": "standard" 
      }, 
      "text_en_splitting": { 
       "filter": [ 
       "lowercase", 
       "porter_stem", 
       "word_delimiter" 
       ], 
       "type": "custom", 
       "tokenizer": "whitespace" 
      }, 
      "text_general": { 
       "filter": [ 
       "lowercase" 
       ], 
       "type": "custom", 
       "tokenizer": "standard" 
      }, 
      "edge_ngram_analyzer": { 
       "filter": [ 
       "lowercase" 
       ], 
       "type": "custom", 
       "tokenizer": "edge_ngram_tokenizer" 
      }, 
      "autocomplete_analyzer": { 
       "filter": [ 
       "lowercase" 
       ], 
       "tokenizer": "whitespace" 
      } 
      }, 
      "tokenizer": { 
      "edge_ngram_tokenizer": { 
       "token_chars": [ 
       "letter", 
       "digit" 
       ], 
       "min_gram": "2", 
       "type": "edgeNGram", 
       "max_gram": "10" 
      } 
      } 
     } 

答えて

0

。 Multi-Matchクエリ文字列とは異なり、クエリ用語を解析する前にトークンをトークン化しません。その結果、複数語の同義語は期待どおりに機能しない可能性があります。

例:

{ 
    "query": { 
     "nested": { 
     "path": "rsa", 
     "query": { 
      "multi_match": { 
       "query": "wood worker", 
       "fields": [ 
        "rsa.answer" 
       ], 
       "type" : "cross_fields", 
       "analyzer": "synonym" 
      } 
     } 
     } 
    } 
} 

何らかの理由であなたは、あなたがそれをトークン化されていないことを確認するために二重引用符で問合せ全体を渡す必要がありますクエリ文字列を好む場合:

例:

post test/_search 
{ 
    "query": { 
     "nested": { 
     "path": "rsa", 
     "query": { 
      "query_string": { 
       "query": "\"wood worker\"", 
       "fields": [ 
        "rsa.answer" 
       ], 
       "analyzer": "synonym" 
      } 
     } 
     } 
    } 
} 
+0

ありがとうございました。 –

+0

**パス**を** rsa **としておけば、**フィールド**に** rsa.answer **を付ける必要がありますか? –

関連する問題