フィールドのカスタム アナライザーを使用して、フィールドのトークンを常に一貫させることができます。この場合、タイプが「stop」のトークン フィルター (ストップワード フィルター) を、ストップワード リストに「Developer」を指定して使用できます (その他、事実上無視する必要があるものはすべて)。これはインデックス作成時にクエリとデータの両方に適用されるため、インデックスに「PHP Developer」があり、クエリに「PHP」がある場合、それらは両方とも「PHP」のトークンに変換されるため、完全一致。
「Developer」と入力するさまざまな方法に対してこれをより堅牢にするために、おそらく「小文字」のトークン フィルターも使用することをお勧めします。そのため、ストップワードは代わりに「developer」になります。
これには、データの再インデックスが必要になることに注意してください。
設定ファイルは次のようになります。
{
"analysis": {
"filter": {
"job_stopwords": {
"type": "stop",
"stopwords": [
"developer", "dev"
]
}
},
"analyzer": {
"job_analyzer": {
"type": "custom",
"filter": [
"lowercase", "job_stopwords"
]
}
}
}
次に、ドキュメントのマッピングのジョブ フィールドに job_analyzer アナライザーを適用する必要があります。
「開発者」がヒットのスコアを上げるには、デフォルトのアナライザーを使用するフィールドのマッピングにサブフィールドを追加できます。次に、job_analyzer を「必須」にして、デフォルトの分析済みバージョンを「すべき」にすることができます。
マッピングは次のようになります。
{
"job_posting": {
"properties": {
"job_type": {
"type": "string",
"analyzer": "job_analyzer",
"fields": {
"default": {
"type": "string"
}
}
}
}
}
}
クエリは次のようになります。
{
"query": {
{
"bool": {
"must": {
"match": {
"job_type" : "PHP Developer"
}
},
"should": {
"match": {
"job_type.default" : "PHP Developer"
}
}
}
}
}
}
どちらが「PHP Developer」、「php dEv」、「PHP」に一致しますが、「PHP Developer」が最も高いスコアを取得します。