gpt4 book ai didi

elasticsearch - Elasticsearch术语不敏感搜索

转载 作者:行者123 更新时间:2023-12-03 00:36:04 25 4
gpt4 key购买 nike

我有下一个查询查询

    {  
"query":{
"bool":{
"must":[
{
"term":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[

],
"should":[

]
}
},
"from":0,
"size":50,
"sort":[

],
"facets":{

}
}

如何按字词修改区分大小写的查询?如果需要,我可以添加更多描述。

最佳答案

默认情况下,所有字段都使用Standard Analyzer进行分析。如果在"index":"not_analyzed"中指定了mapping,则不会分析该字段
Standard Analyzer将输入字符串转换为小写并用空格和特殊字符分割。因此,在您的情况下,HERE_IS_SOME_NAME将被拆分为 token somename。但是将不会创建标记hereis,因为它们是英语副词。

当您搜索"cardrecord.fields.name.raw"字段时,也会发生同样的事情。它拆分为标记,并在特定字段中搜索所有带有该标记的文档(使用Standard Analyzer)。附言:也可以配置单独的或不同的analyzer进行搜索。

因此,匹配查询会搜索带有somename token 的所有文档。因此,您将获得其他文件。
term query专门查找确切的大小写和全字匹配。但这不会与任何文档匹配,因为 token 已经是splitlowercase
请按照您的要求执行以下步骤:

{
"mappings": {
"my_type": {
"properties": {
"cardrecord.fields.name.raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}

按照上面给出的代码,将此 mapping更新为名为 indexmy_type。但是,您需要使用新的映射创建新的索引。由于更新可能无法反射(reflect)。
然后尝试在您的问题中运行搜索查询。

添加详细的查询顺序:

映射:
  {
"mappings": {
"my_type": {
"properties": {
"cardrecord.fields.name.raw": {
"type": "string",
"index": "not_analyzed",
"store": "true"
}
}
}
}
}

索引文件:
{
"cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}

搜索查询:
{
"query": {
"bool": {
"must": [
{
"term": {
"cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}

关于elasticsearch - Elasticsearch术语不敏感搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34201041/

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