match_phrase queryと曖昧検索を組み合わせたような検索をしたいと考えております。
バージョン:Elasticsearch6.3(AWSのElasticsearch Serviceを使用しております。)
具体的には
データ1:(株)テスト春夏秋冬
データ2:株式会社テスト冬秋夏春
が存在するとして、下記2点を実現させたいです。
①『テスあ春』で検索を実行した場合、1だけをヒットさせる。
②『株式会社テスあ』で検索を実行した場合、1と2をヒットさせる。
試したこと
データのtokenizerをicu_tokenizerにして類義語を設定し、match queryでfuzzinessを定義しました。①②ともにデータ2のみがヒットしました。(何故このような結果となるのかは理解できております。)
■Index
PUT test_index_1
{
"settings" : {
"index": {
"number_of_shards" : 1,
"number_of_replicas" : 0,
"analysis":{
"filter":{
"synonym": {
"type": "synonym",
"synonyms": [
"(株)=>株式会社"
]
}
},
"analyzer": {
"test_analyzer": {
"type": "custom",
"tokenizer": "icu_tokenizer",
"filter": [
"synonym"
]
}
}
}
}
},
"mappings": {
"type": {
"properties": {
"name" : {
"type" : "text",
"analyzer" : "test_analyzer"
}
}
}
}
}
■データ
PUT test_index_1/type/1
{"name":"(株)テスト春夏秋冬"}
PUT test_index_1/type/2
{"name":"株式会社テスト冬秋夏春"}
■検索クエリ
①
GET test_index_1/_search
{
"query": {
"match" : {
"name" : {
"query": "テスあ春",
"fuzziness": "2",
"operator" : "and"
}
}
}
}
②
GET test_index_1/_search
{
"query": {
"match" : {
"name" : {
"query": "株式会社テスあ",
"fuzziness": "2",
"operator" : "and"
}
}
}
}
部分一致の曖昧検索を実現したい為、フレーズ検索を調べましたが、match_phrase queryにfuzzinessは使用できないようなので、別のアプローチがあれば、ご教示いただければと思います。
よろしくお願いいたします。