gpt4 book ai didi

elasticsearch - 带通配符的Elasticsearch查询

转载 作者:行者123 更新时间:2023-12-02 22:29:52 26 4
gpt4 key购买 nike

以Elasticsearch教程上的their data为例,以下uri搜索命中了 9 记录,

curl -XGET 'remotehost:9200/bank/_search?q=city:R*d&_source_include=city&pretty&pretty'

而以下请求正文搜索命中 0 记录时,
curl -XGET 'remotehost:9200/bank/_search?pretty' -H 'Content-Type: application/json' 
-d'{"query": {"wildcard": {"city": "R*d"} },
"_source": ["city"]
}
'

但是这两种方法应该彼此等效。知道为什么会这样吗?我在Docker中使用Elasticsearch 5.5.1。

最佳答案

您可以通过单击以下命令来获得预期的结果。该命令会在.keyword字段中为您的命令添加一个额外的city

curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'{"query": {"wildcard": {"city.keyword": "R*d"} }, "_source": ["city"]}'

添加.keyword 的原因

当您将数据插入elasticsearch时,您会注意到 .keyword字段,而该字段是 not_analyzed。默认情况下,对插入数据的字段进行标准分析,并且存在一个多字段 .keyword。如果使用数据创建字段 city,则它将使用标准分析器创建字段 city,并添加了一个多字段 .keyword,即 not_analyzed

在您的情况下,您需要一个 not_analyzed字段进行查询(作为 wildcard查询)。因此,您的查询应该在 city.keyword字段上,默认情况下为not_analyzed。

在第一种情况下,您使用查询参数命中了对 elasticsearch的获取请求。 Elasticsearch将自动将查询转换为第二种格式。

对于可靠的来源,您可以按照 Official docs

The string field has split into two new types: text, which should be used for full-text search, and keyword, which should be used for keyword search.

To make things better, Elasticsearch decided to borrow an idea that initially stemmed from Logstash: strings will now be mapped both as text and keyword by default. For instance, if you index the following simple document:


{
"foo": "bar"
}

Then the following dynamic mappings will be created:


{
"foo": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}

As a consequence, it will both be possible to perform full-text search on foo, and keyword search and aggregations using the foo.keyword field.

关于elasticsearch - 带通配符的Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45515044/

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