在弹性搜索查询中不匹配完整字符串的情况下获取数据

马里拉克斯曼

我的数据存储在以下格式的弹性搜索中

 {
            "_index": "wallet",
            "_type": "wallet",
            "_id": "5dfcbe0a6ca963f84470d852",
            "_score": 0.69321066,
            "_source": {
                "email": "[email protected]",
                "wallet": "[email protected]",
                "countryCode": "+91",
                "phone": "7916318809",
                "name": "test20011"
            }
        },
        {
            "_index": "wallet",
            "_type": "wallet",
            "_id": "5dfcbe0a6ca9634d1c70d856",
            "_score": 0.69321066,
            "_source": {
                "email": "[email protected]",
                "wallet": "[email protected]",
                "countryCode": "+91",
                "phone": "3483330496",
                "name": "test50011"
            }
        },
        {
            "_index": "wallet",
            "_type": "wallet",
            "_id": "5dfcbe0a6ca96304b370d857",
            "_score": 0.69321066,
            "_source": {
                "email": "[email protected]",
                "wallet": "[email protected]",
                "countryCode": "+91",
                "phone": "2744697207",
                "name": "test110021"
            }
        }

如果我们使用以下查询,则不应找到记录

   {
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "wallet": {
                            "query": "operatorqa2.akeodev.com",
                             "operator": "and"
                        }
                    }
                },
                {
                    "match": {
                        "email": {
                            "query": "operatorqa2.akeodev.com",
                                "operator": "and"
                        }
                    }
                }
            ]
        }
    }
}

记录应该找到我是否在 Query 下方传递

    {
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "wallet": {
                            "query": "[email protected]",
                             "operator": "and"
                        }
                    }
                },
                {
                    "match": {
                        "email": {
                            "query": "[email protected]",
                                "operator": "and"
                        }
                    }
                }
            ]
        }
    }
}

我已经在电子邮件和钱包字段上创建了索引。每当用户通过电子邮件或钱包搜索数据时,我不确定用户发送的任何字符串是电子邮件或钱包,所以我使用bool.

该记录应查找用户是否发送了完整的电子邮件地址或完整的钱包地址。请帮我找到解决办法

丹尼尔·施奈特

正如其他社区成员所提到的,在提出此类问题时,您应该指定您正在使用的 Elasticsearch 版本并提供映射。

从具有默认映射的 Elasticsearch 版本 5 开始,您只需将查询更改为针对字段的确切版本而不是分析版本进行查询。默认情况下,Elasticsearch 将字符串映射到类型text(已分析,用于全文搜索)和keyword(未分析,用于精确匹配搜索)的多字段在您的查询中,您将针对<fieldname>.keyword-fields进行查询

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "wallet.keyword": "[email protected]"
                    }
                },
                {
                    "match": {
                        "email.keyword": "[email protected]"
                    }
                }
            ]
        }
    }
}

如果您使用的是版本 5 之前的 Elasticsearch 版本,请将 index-property 从 更改analyzednot_analyzed并重新索引您的数据。

映射片段:

{
  "email": {
    "type" "string",
    "index": "not_analyzed"
  }
}

您的查询仍然不需要使用and-operator。它看起来与我上面发布的查询相同,除了您必须查询email和 -wallet字段,而不是email.keywordwallet.keyword

我可以向您推荐 Elastic 中与该主题相关的以下博客文章:字符串已死,字符串万岁!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式,在特定符号之前获取完整字符串,或者在不包含符号的情况下获取完整字符串

Pandas 包含不匹配的完整字符串

如何在不区分大小写的情况下匹配字符串中的子字符串

在字符串属性与给定字符串匹配的情况下进行Algolia搜索

如何在不格式化为字符串的情况下获取 24 中的时间

在不转换为字符串的情况下获取整数中的数字计数

在没有任何明确搜索条件的情况下从长字符串中获取字符串

弹性搜索只匹配完整字段

如何在不停在中间的情况下键入完整字符串?

弹性搜索:字符串数组上的完全匹配查询

如何在不知道完整字符串名称的情况下在数组中查找特定字符串

如何匹配包含Unicode字符的完整字符串?

如何在弹性搜索中查询不区分大小写的字符串

弹性搜索查询字符串数据类型

在这种情况下,如何从字符串中获取子字符串?

在python中匹配完整字符串,这是什么语法?

在不丢失先前数据的情况下将数据追加到字符串

更新输入未从数据库 laravel 获取完整字符串

在不改变源数据库的情况下清理 MySQL 查询字符串数据?

如何在不获取空值到输出数组的情况下拆分字符串

如何在不获取null作为输出的情况下打印getter字符串?

使用JQuery中的复选框进行过滤时,如何在数据属性的完整字符串中进行搜索,而不仅仅是完全匹配?

弹性搜索查询字符串请求

字符串范围查询[弹性搜索]

正则表达式除完整字符串外,不包含字符串中的部分

如何在不访问数据库连接的情况下 Mysqli 转义字符串?

在不忽略空格的情况下拆分字符串

如何访问数据框中dtype对象的完整字符串?

如何在没有 javascript 方法的情况下搜索字符串中的给定字符串?