gpt4 book ai didi

elasticsearch - 如何从 `match_phase`查询中转义特殊字符?

转载 作者:行者123 更新时间:2023-12-03 02:31:49 25 4
gpt4 key购买 nike

我正在使用elasticsearch 6.8并执行以下查询:

curl localhost:9200/twitter/_search?pretty=true -H 'Content-Type: application/json' -d '
{ "query": {"match_phrase": { "name": ".C" }}}'
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "twitter",
"_type" : "1",
"_id" : "2",
"_score" : 0.2876821,
"_source" : {
"name" : "my name C 100"
}
},
{
"_index" : "twitter",
"_type" : "1",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"name" : "my name .C 100"
}
}
]
}
}

您看到返回了两个文档,但是我不希望第一个没有 .C的文档被返回。我试图用 dot逃脱 {"match_phrase": { "name": "\\.C" }},但是它不起作用。

我不想将 name的类型更改为 keyword,因为我仍然需要标记器。

我将 .作为 protected 单词放在索引设置中,如下所示:
#curl localhost:9200/twitter/_settings?
{
"twitter" : {
"settings" : {
"index" : {
"number_of_shards" : "5",
"provided_name" : "twitter",
"creation_date" : "1579489541087",
"analysis" : {
"filter" : {
"word_delim_filter" : {
"type" : "word_delimiter",
"protected_words" : [
"."
]
}
},
"analyzer" : {
"content" : {
"type" : "custom",
"tokenizer" : "whitespace"
},
"custom_synonyms_delim" : {
"filter" : [
"word_delim_filter"
],
"tokenizer" : "whitespace"
}
}
},
"number_of_replicas" : "1",
"uuid" : "nYr7NPdVRCqIcTzzM_iBeQ",
"version" : {
"created" : "6080299"
}
}
}
}
}

如何在查询中转义 dot

最佳答案

这是一个在您的方案中如何处理dot的工作示例:

映射

PUT my_index
{
"settings": {
"analysis": {
"filter": {
"word_delim_filter": {
"type": "word_delimiter",
"type_table": [
". => ALPHANUM"
]
}
},
"analyzer": {
"content": {
"type": "custom",
"tokenizer": "whitespace"
},
"custom_synonyms_delim": {
"filter": [
"word_delim_filter"
],
"type": "custom",
"tokenizer": "keyword"
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text",
"analyzer": "custom_synonyms_delim",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}

索引文档
POST my_index/_doc/1
{
"name" : "my name C 100"
}

POST my_index/_doc/2
{
"name" : "my name .C 100"
}

搜索查询
GET my_index/_search
{
"query": {
"match_phrase": {
"name": ".C"
}
}
}

结果
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.6931472,
"_source" : {
"name" : "my name .C 100"
}
}
]

希望这可以帮助

关于elasticsearch - 如何从 `match_phase`查询中转义特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com