gpt4 book ai didi

elasticsearch - elasticsearch 中 query_string 上的特殊字符

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

假设我有一个索引并通过以下语句向其中添加了一个文档:

POST /temp/item
{
"text": "dave@domain.com dave@do-main.com one,two three:four"
}

我想要一些查询语句来返回这个文档,例如:

  1. *@domain*
  2. *@do-*
  3. 一,二
  4. three:four --> 这实际上会产生错误

每个选择的语句类似于这样:

GET /temp/item/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "*@domain*",
"allow_leading_wildcard": "true",
"default_operator": "AND"
}
}
]
}
}
}

他们都没有回来。

我理解原因是分析器设置为standard,它按任何分界线分割文本。所以我认为我必须将分析器更改为 whitespace,如下所示:

PUT /temp
{
"mappings": {
"item" : {
"properties" : {
"text" : {
"type" : "string",
"analyzer": "whitespace"
}
}
}
}
}

这样做并没有解决问题。没有声明返回文档。

问题

  1. 如何配置索引或更改查询语句,以便捕获上述所有示例。
  2. 为什么在我将分析器更改为“空白”后,Elasticsearch 没有返回文档?

最佳答案

几乎在那里,您需要明确指定 query_string 的“字段”匹配。可以使用 default_fieldfields 选项指定大小写

例子:

{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "*@domain*",
"fields": [
"text"
],
"allow_leading_wildcard": "true",
"default_operator": "AND"
}
}
]
}
}
}

如果未指定任何内容,query_string 将使用 _all 字段。

2) three:four 需要用双引号括起来,否则它会被解释为 field:three 匹配 query:four示例:

{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "\"three:four\"",
"fields": [
"text"
],
"allow_leading_wildcard": "true",
"default_operator": "AND"
}
}
]
}
}
}

关于elasticsearch - elasticsearch 中 query_string 上的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39229566/

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