フィールドのカスタムアナライザーを使用して、フィールドのトークンを常に一貫性のあるものにすることができます。この場合、ストップワードリスト(および実質的に無視されるべきもの)に「開発者」というタイプの "stop"(ストップワードフィルタ)タイプのトークンフィルタを使用することができます。これはインデックスとクエリの両方に適用されるので、インデックスに "PHP Developer"があり、クエリに "PHP"がある場合、それらは両方とも "PHP"のトークンに変換されます。完全一致
「開発者」と入力するさまざまな方法でこれをより堅牢にするには、「小文字」のトークンフィルタも使用するとよいでしょう。そのため、ストップワードは代わりに「開発者」になります。
データを再インデックスする必要があることに注意してください。そして、あなたがあなたの文書のためのマッピングでジョブフィールドにjob_analyzerアナライザを適用する必要が
{
"analysis": {
"filter": {
"job_stopwords": {
"type": "stop",
"stopwords": [
"developer", "dev"
]
}
},
"analyzer": {
"job_analyzer": {
"type": "custom",
"filter": [
"lowercase", "job_stopwords"
]
}
}
}
:
設定ファイルは次のようになってしまいます。
"開発者"がヒットのスコアを上げるようにするには、フィールドのマッピングにデフォルトのアナライザーを使用するサブフィールドを追加します。 job_analyzerを "必須"にして、デフォルトの解析バージョンを "should"にすることができます。
あなたのマッピングがこのようなものになります。 "PHP開発者を" 一致します
{
"query": {
{
"bool": {
"must": {
"match": {
"job_type" : "PHP Developer"
}
},
"should": {
"match": {
"job_type.default" : "PHP Developer"
}
}
}
}
}
}
、 "PHPのDEV" と「PHP:あなたのクエリは、このようなものになるだろう
{
"job_posting": {
"properties": {
"job_type": {
"type": "string",
"analyzer": "job_analyzer",
"fields": {
"default": {
"type": "string"
}
}
}
}
}
}
を"しかし、" PHP Developer "は最高得点を得るでしょう。
おかげさまで、ここでのトリックは、「カットオフ」を正しく調整することですが、スコアが増えるので、まだOKです。 –
単一のトークンの頻度は関係ありませんが、より頻度の低いトークンを作成することは可能ですが、頻度の低いトークンは* MUST *になりますか? –