Elasticsearch:使用特殊字符打开和关闭括号进行搜索
Elasticsearch : Search with special character Open & Close parentheses
您好,我正在尝试在弹性搜索中搜索其中包含这些字符“(”、“)”的单词。我无法获得预期的结果。
这是我正在使用的查询
{
"query": {
"query_string" : {
"default_field" : "name",
"query" : "\(Pas\)ta\""
}
}}
在结果中,我首先获得 "PASTORS"、"PAST"、"PASCAL"、"PASSION" 的记录。 我想在搜索结果的第一条记录中获取名称 'Pizza & (Pas)ta',因为它是最佳匹配项。
这是模式中名称字段的分析器
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
"name": {
"analyzer": "autocomplete",
"search_analyzer": "standard",
"type": "string"
},
请帮我解决这个问题,谢谢
您使用了 standard
分词器,它正在从生成的分词中删除 (
和 )
。而不是获取令牌 (pas)ta
生成的令牌之一是 pasta
因此您无法匹配 (pas)ta
.
您可以使用 whitespace
分词器,而不是使用 standard
分词器,它将保留名称中的所有特殊字符。将分析器定义更改为以下内容:
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
您好,我正在尝试在弹性搜索中搜索其中包含这些字符“(”、“)”的单词。我无法获得预期的结果。
这是我正在使用的查询
{
"query": {
"query_string" : {
"default_field" : "name",
"query" : "\(Pas\)ta\""
}
}}
在结果中,我首先获得 "PASTORS"、"PAST"、"PASCAL"、"PASSION" 的记录。 我想在搜索结果的第一条记录中获取名称 'Pizza & (Pas)ta',因为它是最佳匹配项。
这是模式中名称字段的分析器
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
"name": {
"analyzer": "autocomplete",
"search_analyzer": "standard",
"type": "string"
},
请帮我解决这个问题,谢谢
您使用了 standard
分词器,它正在从生成的分词中删除 (
和 )
。而不是获取令牌 (pas)ta
生成的令牌之一是 pasta
因此您无法匹配 (pas)ta
.
您可以使用 whitespace
分词器,而不是使用 standard
分词器,它将保留名称中的所有特殊字符。将分析器定义更改为以下内容:
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}