nGramsや同義語のような機能を利用しようとしていますが、運が上がらないのです。ElasticSearch部分検索の一致
私はthis blog postに従っています。私はマッピングとクエリを自分のデータに適応させようとしましたが、正確な用語にしかマッチしません。また、同じ結果を持つthis gistの記事の正確なデータを使ってみました。ここで
はマッピングです:
{
"mappings": {
"item": {
"properties": {
"productName": {
"fields": {
"partial": {
"search_analyzer":"full_name",
"index_analyzer":"partial_name",
"type":"string"
},
"partial_back": {
"search_analyzer":"full_name",
"index_analyzer":"partial_name_back",
"type":"string"
},
"partial_middle": {
"search_analyzer":"full_name",
"index_analyzer":"partial_middle_name",
"type":"string"
},
"productName": {
"type":"string",
"analyzer":"full_name"
}
},
"type":"multi_field"
},
"productID": {
"type":"string",
"analyzer":"simple"
},
"warehouse": {
"type":"string",
"analyzer":"simple"
},
"vendor": {
"type":"string",
"analyzer":"simple"
},
"productDescription": {
"type":"string",
"analyzer":"full_name"
},
"categories": {
"type":"string",
"analyzer":"simple"
},
"stockLevel": {
"type":"integer",
"index":"not_analyzed"
},
"cost": {
"type":"float",
"index":"not_analyzed"
}
}
},
"settings": {
"analysis": {
"filter": {
"name_ngrams": {
"side":"front",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
},
"name_ngrams_back": {
"side":"back",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
},
"name_middle_ngrams": {
"type":"nGram",
"max_gram":50,
"min_gram":2
}
},
"analyzer": {
"full_name": {
"filter":[
"standard",
"lowercase",
"asciifolding"
],
"type":"custom",
"tokenizer":"standard"
},
"partial_name": {
"filter":[
"standard",
"lowercase",
"asciifolding",
"name_ngrams"
],
"type":"custom",
"tokenizer":"standard"
},
"partial_name_back": {
"filter":[
"standard",
"lowercase",
"asciifolding",
"name_ngrams_back"
],
"type":"custom",
"tokenizer":"standard"
},
"partial_middle_name": {
"filter":[
"standard",
"lowercase",
"asciifolding",
"name_middle_ngrams"
],
"type":"custom",
"tokenizer":"standard"
}
}
}
}
}
}
検索クエリ(私はより多くの結果を返すようにしようとするフィルタを削除):
I場合は、上記の趣旨からクエリを使用して{
"size":20,
"from":0,
"sort":[
"_score"
],
"query": {
"bool": {
"should":[
{
"text": {
"productName": {
"boost":5,
"query":"test query",
"type":"phrase"
}
}
},
{
"text": {
"productName.partial": {
"boost":1,
"query":"test query"
}
}
},
{
"text": {
"productName.partial_middle": {
"boost":1,
"query":"test query"
}
}
},
{
"text": {
"productName.partial_back": {
"boost":1,
"query":"test query"
}
}
}
]
}
}
}
最初のboolクエリから次のコードを削除します。
したがって、直接一致を返しません。n私の検索用語は何でも、私はまだ結果を返しません。
私は何かが目立つように見えていないと思うし、他の情報が何であるか本当に分かっていないと思います。
マッピングを投稿してください。 'curl http:// domain.com/index/type/_mapping'正しく設定されていることを確認するだけです。 – ramseykhalaf
また、 'text'は推奨されません、' match'を使用してください! – ramseykhalaf
@ramseykhalafあなたはこれをちょうど解決しました、私は前にマッピングを引っ張ってjsonを見て、それが正しいと仮定しましたが、実際にそれを見て、それはすべてが乱れていたことに気付きました。私は書いた答えにあなたを信用します! – Rockstar04