我正在为ElasticSearch使用以下设置和映射
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10
},
"synonym_filter": {
"type": "synonym",
"synonyms":[
"yoga,fit-sports,blue",
"tshirt,tees,t-shirt "
]
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"synonym_filter",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"products": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
}
}
}
我在字段“名称:公主印花T恤”上建立了索引。
就像使用空白分析器一样,es会创建“T恤”之类的 token 。
但是对于搜索,我使用的是“search_analyzer”:“standard”,我认为查询就像“公主印花T恤”,并且此“T恤”将不匹配,因此将给出空的搜索结果。
我这边的一种解决方案就像添加“t恤,t恤”之类的同义词。然后我会得到结果。但是在这种情况下,如果我们搜索“衬衫”,它将同时返回“T恤和衬衫”,这是 Not Acceptable 。
如果我不使用此“search_analyzer”:“standard”,则不会得到预期的结果。
如果我搜索“t恤”,则只需要tat搜索结果
最佳答案
问题描述
问题部分在于您已经描述了"search_analyzer": "standard"
。
这会将T-shirt
的每个条目转换为 token t
和shirt
。
索引中的数据看起来像t-shirt
,t-shir
等,并且不匹配。
可能的解决方案
适应搜索分析器
您需要确保查询是小写的,并且在空格处分割。
因此,您还可以使用whitespace analyzer
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html结合小写分析器来定义用于查询时间的自定义分析器。
关于magento - 在Elasticsearch中搜索T恤不退还T恤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49514491/