gpt4 book ai didi

elasticsearch - 带有前缀查询的Elastic Search不区分大小写查询

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

我是 flex 搜索的新手。我有以下查询

GET deals2/_search 
{
"size": 200,
"_source": ["acquireInfo"],
"query": {
"bool": {

"must": [
{

"query_string": {
"fields": ["acquireInfo.company_name.keyword"],
"query": "az*"
}
}
]
}
}

}

在这里我希望Elastic应该给出不区分大小写的结果,例如字符串开头如下
"Az" 
"AZ"
"az"
"aZ"
"Az"

但是我并没有像这样得到所有结果。所以任何人都可以帮助我。

示例:-我有4个文档
1)Aziia Avto Ust-Kamenogorsk OOO 
2)AZ Infotech Inc
3)AZURE Midstream Partners LP
4)State Oil Fund of the Republic of Azerbaijan

现在搜索 az,应该只返回前3个文档,因为它们以 az开头,此处忽略大小写,而不是第4个文档,第4个文档也具有 az,但开头没有。

最佳答案

这是在您使用关键字字段在应用程序中索引company_name时发生的。

关键字分析器是一个“空转”分析器,它以单个 token 的形式返回整个输入字符串,例如,公司名称,由fooFoofOo组成,仅使用大小写存储,并搜索foo,仅将foo匹配为 flex 搜索最终适用于 token 匹配(区分大小写)。

您需要使用standard analyzer或其他一些custom analyzer来解决您的其他用例,并在字段上使用lowercase token filter并使用被分析的match查询,并使用用于对该字段建立索引的同一分析器,搜索查询将生成相同的 token 的方式,这些 token 存储在索引中,并且搜索将不区分大小写。

编辑:在聊天中与用户进行了讨论,并更新了答案以满足他的要求,这些要求如下:

步骤1:-定义索引的设置和映射。

端点:-http:// {{hostname}}:{{port}} / {{index}}

{
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": [],
"filter": "lowercase"
}
}
}
},
"mappings": {
"properties": {
"company_name": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
}
}

步骤2:为所有文档编制索引

端点:http:// {{hostname}}:{{port}} / {{index}} / _doc /-> 1,2,3,4等
{
"company_name" : "State Oil Fund of the Republic of Azerbaijan"
}

步骤3:-搜索查询

端点:-http:// {{hostname}}:{{port}} / {{index}} / _search
{ "query": {
"prefix" : { "company_name" : "az" }
}
}

这将带来以下预期结果:
{
"took": 870,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "prerfixsearch",
"_type": "_doc",
"_id": "2ec9df0fc-dc04-47bb-914f-91a9f20d09efd15f2506-293f-4fb2-bdc3-925684a930b5",
"_score": 1,
"_source": {
"company_name": "AZ Infotech Inc"
}
},
{
"_index": "prerfixsearch",
"_type": "_doc",
"_id": "160d01183-a308-4408-8ac1-a85da950f285edefaca2-0b68-41c6-ba34-21bbef57f84f",
"_score": 1,
"_source": {
"company_name": "Aziia Avto Ust-Kamenogorsk OOO"
}
},
{
"_index": "prerfixsearch",
"_type": "_doc",
"_id": "1da878175-7db5-4332-baa7-ac47bd39b646f81c1770-7ae1-4536-baed-0a4f6b20fa38",
"_score": 1,
"_source": {
"company_name": "AZURE Midstream Partners LP"
}
}
]
}
}

解释:,就像早期的OP一样;在搜索结果中没有提到排除第4个文档,这就是我建议创建一个文本字段的原因,因此可以生成单个标记,但是现在只要求前缀搜索,我们不这样做不需要单独的 token ,我们只需要1个 token ,但是应该将其小写以支持不区分大小写的搜索,这就是我在 company_name字段上应用自定义规范化器的原因。

关于elasticsearch - 带有前缀查询的Elastic Search不区分大小写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56629313/

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