在弹性搜索中寻找不返回T恤的T恤
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在弹性搜索中寻找不返回T恤的T恤相关的知识,希望对你有一定的参考价值。
我正在使用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恤”的标记。但是为了搜索我正在使用“search_analyzer”:“标准”我认为这个查询就像“公主印花T恤”,这个“T恤”将不匹配,因此会给出空搜索结果。我身边的一个解决方案就像添加“T恤,T恤”这样的同义词。然后我会得到结果。但在这种情况下,如果我们搜索“衬衫”,它将返回“T恤和衬衫”,这是不可接受的。如果我没有使用这个“search_analyzer”:“标准”我没有得到预期的结果。如果我搜索“T恤”,我只需要搜索结果
答案
Problem description
有问题的部分就像你已经描述过的"search_analyzer": "standard"
。
这将把T-shirt
的每个条目转换为令牌t
和shirt
。索引中的数据看起来像t-shirt
,t-shir
等,并且不匹配。
Possible solution
适应搜索分析器
您需要确保查询是小写的,在空白处拆分。因此,您可以使用whitespace analyzer
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html结合小写分析器定义查询时间的自定义分析器。
以上是关于在弹性搜索中寻找不返回T恤的T恤的主要内容,如果未能解决你的问题,请参考以下文章