gpt4 book ai didi

elasticsearch - 不区分大小写搜索非索引字段

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

如何在不分析数据的情况下使用不区分大小写的过滤器进行搜索?例如在此示例中,由于大写,我将“delhi”和“Delhi”作为单独的条目。

new york 2
Delhi 1
delhi 1
new Jersey 1

预期结果:

new york 2
delhi 2
new jersey 1

我尝试了小写分析器,但为此我需要将索引更改为 analyzed ,这将返回"new"作为一个单独的城市,这是错误的。

DELETE /test_index
PUT /test_index
{
"mappings": {
"doc": {
"properties": {
"cities": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}

POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"cities":["new york", "delhi"]}
{"index":{"_id":2}}
{"cities":["new york", "Delhi", "new Jersey"]}


POST /test_index/_search?search_type=count
{
"aggs": {
"city_terms": {
"terms": {
"field": "cities"
}
}}}

最佳答案

是的,但是您仍然需要一个keyword 分析器来执行与not_analyzed 完全相同的工作,但只是将您的输入小写:

PUT /test_index
{
"settings": {
"analysis": {
"analyzer": {
"keyword": {
"type": "custom",
"tokenizer": "keyword",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"cities": {
"type": "string",
"analyzer": "keyword"
}
}
}
}
}

更新

直到 ES 5,你可以这样做:

POST /test_index/_search?search_type=count
{
"aggs": {
"city_terms": {
"terms": {
"script": "doc.cities.values.collect{it.toLowerCase()}"
}
}}}

关于elasticsearch - 不区分大小写搜索非索引字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024998/

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