当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch通配符区分大小写

狄飞尘
2023-03-14

如何使通配符不区分大小写?

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

共有3个答案

夏侯华彩
2023-03-14

我正在为nodejs客户端寻找同样的选择,所以遇到了这个问题,所以发布作为答案可能会帮助其他人。

我必须把这个词转换成小写,它对我来说很有用。*${term.toLowerCase()}*这是完整的函数

searchUsers(term, from, limit) {
    let users = await EsClient.search({
        index: 'users',
        type: 'users',
        body: {
            from,
            size: limit,
            query: {
                bool: {
                    should: [
                        {
                            wildcard: {
                                email: {
                                    value: `*${term.toLowerCase()}*`
                                }
                            }
                        },
                        {
                            wildcard: {
                                "name.keyword": {
                                    value: `*${term.toLowerCase()}*`
                                }
                            }
                        }
                      ],
                    must_not: {
                        terms: {_id: blacklist}
                    }
                }
            }
        }
    });
}
韩欣怿
2023-03-14

自7.10版以来,通配符查询支持特殊参数不区分大小写(布尔值)。不区分大小写的搜索示例:

GET /_search
{
  "query": {
    "wildcard": {
      "my_field": {
        "value": "ki*y",
        "case_insensitive": true
      }
    }
  }
}
柳鸿博
2023-03-14

不分析通配符。这取决于你为搜索的领域提供了什么样的分析器。但是如果使用默认的分析器,那么通配符查询将返回不区分大小写的结果。

示例:在示例索引中发布两个名称,一个是“Sid”,另一个是“Sid”。

POST sample/sample
{
  "name" : "sid"
}

POST sample/sample
{
  "name" : "Sid"
}

然后执行通配符查询:

GET sample/_search
{
  "query": {
    "wildcard": {
      "name": {
        "value": "s*"
      }
    }
  }
}

这将向我返回两份文件:

{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "sample",
        "_type": "sample",
        "_id": "AWRPM87Wb6oopELrnEKE",
        "_score": 1,
        "_source": {
          "name": "Sid"
        }
      },
      {
        "_index": "sample",
        "_type": "sample",
        "_id": "AWRPM9tpb6oopELrnEKF",
        "_score": 1,
        "_source": {
          "name": "sid"
        }
      }
    ]
  }
}

但如果对“S*”执行通配符查询,它将不会返回任何结果。因为默认令牌过滤器以小写形式存储术语,而术语“Sid”在反向索引中存储为“Sid”。

 类似资料:
  • 对于报告(0.1%的所有查询),我需要返回一个所有可能类别的列表,区分大小写! 考虑以下文件: 运行以下查询: 返回: 是否有方法返回区分大小写的类别(存储在文档中)?我对此查询结果中的感兴趣。 Elasticsearch论坛中的问题 谢谢,伊泰

  • 我从这里学了一个例子 索引的映射为 索引的文档是 在对“full_text”字段使用简单的匹配查询时,我注意到如下所示 我看到文件是匹配的。另外,如果我使用大写字母,也就是“quick”作为搜索词,它显示文档是匹配的。 为什么会这样?。默认情况下,标记器会将“full_text”字段中的文本拆分为“quick”、“foxes”。那么,匹配查询如何与文档匹配大小写值呢?

  • 需要制作一个密码程序,用户在开始时设置密码,在程序停止前可以输入密码3次。该程序不能区分大小写。 程序按预期打印,但不区分大小写

  • 我试图在Elasticseach 7中实现部分的、区分大小写的匹配。 我正在使用设置创建索引: 以及映射: 以下查询将正确返回文档: 但当我将搜索词小写时,它不会返回文档: 如何配置Elasticsearch,使其与使用小写搜索词的名称字段值匹配?

  • 问题内容: 我尝试在elasticsearch.yml文件中创建一个条目,以针对要点中提到的内容创建自定义分析器: https //gist.github.com/1403902 但我得到以下错误 我仍然不知道如何做到这一点。我已经在stackoverflow上搜索了相同的内容,并得到了类似的回复(如上述要点所述) 请给我一个例子,我可以测试。 问题答案: 由于配置文件在启动时是只读的,因此要使更

  • 问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut