0
私はElasticSearchを初めて使用していて、Elasticsearchを設定してファジーマッチを得ようとしました。ファジー検索、オートコンプリートフィルター、およびシングルを実装すると、完全一致は部分一致よりもスコアが低いようです。たとえば、クエリが "Ring"の場合、 "Ring"の代わりに "Brass Ring"との一致が高いようです。ファジー一致が完全一致より高いスコアを得ました
誰でもお手伝いできますか?ここで
は、私は、インデックスを作成する方法である:ここでは
itemindex = es.indices.create(
index='mo-items-index-1',
body={
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
},
"custom_shingle": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3,
"output_unigrams": True
},
"my_char_filter": {
"type": "pattern_replace",
"pattern": " ",
"replacement": ""
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"custom_shingle",
"autocomplete_filter",
"my_char_filter"
]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"item_id": {
"type": "string",
"analyzer": "autocomplete",
"search_analyzer": "standard"
},
"item_name": {
"type": "string",
"analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
}
}
},
# Will ignore 400 errors, remove to ensure you're prompted
ignore=400
)
は、私は言葉を照会する方法である:
res2 = es.search(index="mo-items-index-1", size=200, body={"query": {"multi_match": {
"fields": [
"item_name", "item_id"], "query": userQuery, "fuzziness": "AUTO"}}, "highlight": {
"fields": {
"item_name": {},
"item_id": {}
}
}, })
は、あなたの答えをありがとう、私は「ピン」などのアイテムを持っている、「ミッキーを!ピン "、"ブルーピン "と"キャップ "、"野球帽 "、"赤い帽子 "ので、私はピン、キャップなどをitem_name.keywordの下の"値 "フィールドに追加する必要がありますか? "value"のようなもの:["Ring"、 "Pin"、 "Cap"]?事前に感謝します – Abhijay
あなたの質問で判断すると、あなたはElasticsearchに関するドキュメントを読んでいませんでした。基本的ではない。サブフィールドの場合、何もする必要はありません。 Elasticsearchはサブフィールドを自動的に設定します。キバナの開発ツール(私がお勧めします)を使用している場合は、マッピング、データ、クエリを使って完全なテストを行っています:https://gist.github.com/astefan/f3e8f9ff870c5efed860588186af7e14 –
はい、私はドキュメンテーション。この設定では、「リング」という用語にクエリを実行すると、インデックスに「リング」が存在する場合、先頭の結果が「センタリング」になります。何が起きているのか教えていただけますか? – Abhijay