gpt4 book ai didi

ElasticSearch query_string 无法解析包含某些字符的查询

转载 作者:行者123 更新时间:2023-11-29 02:48:56 29 4
gpt4 key购买 nike

我正在使用 ElasticSearch (2.4) 和官方 Python 客户端执行简单查询。我的代码:

from elasticsearch import Elasticsearch

es_client = Elasticsearch("localhost:9200")
index = "indexName"
doc_type = "docType"

def search(query, search_size):
body = {
"fields": ["title"],
"size": search_size,
"query": {
"query_string": {
"fields": ["file.content"],
"query": query
}
}
}
response = es_client.search(index=index, doc_type=doc_type, body=body)
return response["hits"]["hits"]

search("python", 10) # Works fine.

问题是当我的查询包含不平衡的圆括号或方括号时。例如 search("python {programming", 10) ES 抛出:

elasticsearch.exceptions.RequestError: TransportError(400, u'search_phase_execution_exception', u'Failed to parse query [python {programming}]')

这是 ES 的预期行为吗?它不使用分词器来删除所有这些字符吗?

注意:我使用 Java 时也会遇到这种情况。

最佳答案

我知道我来晚了,但我在这里发帖,希望它能帮助其他人。正如我们从 Elasticsearch 文档中了解到的那样 here ES有一些保留字符。

保留字符为:+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /

那么,现在您有两种可能的解决方案来修复它。当我遇到特殊字符问题时,这些对我来说非常有效

解决方案 1:\\ 包裹您的特殊字符

"query": {
"bool": {
"must": [
{
"match": {
"country_code.keyword": "IT"
}
},
{
"query_string": {
"default_field": "display",
"query": "Magomadas \\(OR\\), Italy"
}
}
]
}
}

解决方案 2:使用 simple_query_string你的query没有变化但它不支持 default_field , 所以你可以使用 fields相反。

  "query": {
"bool": {
"must": [
{
"match": {
"country_code.keyword": "IT"
}
},
{
"simple_query_string": {
"fields": ["display"],
"query": "Magomadas (OR), Italy"
}
}
]
}
}

关于ElasticSearch query_string 无法解析包含某些字符的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384936/

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