環境
基本的に、私が持っているのは、pty_firstname と pty_surname に分割された名前の大規模なデータセットです。このデータを Informix DB から ElasticSearch にインデックス付けすると、すべて正常に動作します。ただし、私が達成できていないのは、このテーブル構造の論理マッピングと、マッピングの恩恵を受けるクエリです。私が問題を抱えていると思われるのは、名前が実際には2つの列に分割されているため、クエリが適切な結果セットを返すのが少し難しいことです。
誰かが私に助けを与えることができれば、完全一致ではないにしても最も近い結果セットを一番上に返し、結果セットを進めるにつれて結果の類似性が低くなります。
マッピング
ここでマッピングとクエリのインスピレーションを得ようとしましたが、いくつかの変更を加えましたが、必要な/望む結果が得られないようです - http://goo.gl/hm9ISL
{
"mappings":{
"user":{
"properties":{
"pty_forename":{
"type":"multi_field",
"fields":{
"name":{
"type":"string",
"index":"analyzed"
},
"exact":{
"type":"string",
"index":"not_analyzed"
}
}
},
"pty_surname":{
"type":"multi_field",
"fields":{
"name":{
"type":"string",
"index":"analyzed"
},
"exact":{
"type":"string",
"index":"not_analyzed"
}
}
},
"pty_minute_ref":{
"type":"integer",
"index":"not_analyzed"
},
"pty_deed_code":{
"type":"string",
"index":"not_analyzed"
},
"pty_name_prefix":{
"type":"string",
"index":"not_analyzed"
},
"pty_name_suffix":{
"type":"string",
"index":"not_analyzed"
},
"pty_address":{
"type":"string",
"index":"not_analyzed"
},
"pty_desig_suffix":{
"type":"string",
"index":"not_analyzed"
},
"pty_mc_ind":{
"type":"string",
"index":"not_analyzed"
},
"pty_of_ind":{
"type":"string",
"index":"not_analyzed"
},
"pty_or_ind":{
"type":"integer",
"index":"not_analyzed"
},
"pty_date_entered":{
"type":"basic_date",
"index":"not_analyzed"
},
"pty_data":{
"type":"string",
"index":"not_analyzed"
},
"pty_type":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
クエリ
{
"query":{
"bool":{
"must":[
{
"multi_match":{
"query":"Nathan Smith",
"fields":[
"pty_forename",
"pty_surname"
]
}
}
],
"should":[
{
"term":{
"pty_forename.exact":{
"value":"Nathan Smith",
"boost":15
}
}
},
{
"prefix":{
"pty_forename.exact":{
"value":"Nathan Smith",
"boost":10
}
}
},
{
"match_phrase":{
"pty_forename":{
"query":"Nathan Smith",
"slop":0,
"boost":5
}
}
}
]
}
}
}
結論
私が取得している結果セットは、両方のフィールド、つまり pty_forename と pty_surname でクエリを実行しておらず、Nathan などの姓を持つ人を返しています。どんな助けでも大歓迎です。
更新 - Gist へのリンク