gpt4 book ai didi

elasticsearch - Elasticsearch 查找多个精确值查询

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

我有这样的数据存储在 flex 索引中

{'name': 'Arnie Metz PhD', 'user_id': 'CL_000960', 'email_id': 'streich.anjelica@gmail.com', 'customer_id': 'CL_2135514566_1427476813'}
{'name': 'Ms. Princess Bernhard', 'user_id': 'CL_000972', 'email_id': 'obatz@yahoo.com', 'customer_id': 'CL_2135514566_1427476810'}
{'name': "Lori O'Kon", 'user_id': 'CL_000980', 'email_id': 'murl86@schmidt.com', 'customer_id': 'CL_2135514566_1427476811'}
{'name': "Ahmad O'Reilly", 'user_id': 'CL_000981', 'email_id': 'kassie95@yahoo.com', 'customer_id': 'CL_2135514566_1427476815'}
{'name': 'Lovell Connelly', 'user_id': 'CL_000982', 'email_id': 'wweimann@mclaughlincorwin.com', 'customer_id': 'CL_2135514566_1427476815'}
{'name': 'Errol Feest', 'user_id': 'CL_000989', 'email_id': 'cordella30@yahoo.com', 'customer_id': 'CL_2135514566_1427476810'}
{'name': "May O'Conner", 'user_id': 'CL_000990', 'email_id': 'iverson51@gmail.com', 'customer_id': 'CL_2135514566_1427476815'}
{'name': 'Virgie Wyman', 'user_id': 'CL_000999', 'email_id': 'florine.jenkins@yahoo.com', 'customer_id': 'CL_2135514566_1427476812'}
{'name': 'Ofelia McClure', 'user_id': 'CL_0001001', 'email_id': 'fidelia.hilll@mayert.com', 'customer_id': 'CL_2135514566_1427476814'}
{'name': 'Mr. Edson Rosenbaum Jr.', 'user_id': 'CL_0001003', 'email_id': 'mkerluke@hotmail.com', 'customer_id': 'CL_2135514566_1427476810'}

我想从查询中获取的是使用以下查询从user_id列表中获取的电子邮件ID列表

Query 1



按照 Elastic Doc
{
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"user_id" : ["CL_0004430", "CL_0004496"]
}
}
}
}
}

这没有给出结果。它给出空结果

Query 2


{
"query": {
"bool": {
"must": [
{
"match": {
"user_id": {
"query": "['CL_00078','CL_00028']",
"operator": "or"
}
}
}
]
}
},
"aggs": {}
}

这按预期工作,但问题在于条件参数的限制。我不能在列表中提供超过1000封电子邮件。

有没有更好的查询方法来获取一条查询中的10000条以上的记录?

最佳答案

这是一个非常好的问题。在存储用户ID之类的内容时,通常最好将其设置为“未分析”。这样,当您精确搜索它们时,您将获得预期的结果。使用以下映射时,您的字词查询将按预期工作:

POST test_users
{
"mappings" :{
"test_user":{
"properties": {
"name": { "type": "string" },
"user_id": {"type": "string", "index": "not_analyzed"},
"email_id": {"type": "string", "fields": { "raw": { "type": "string", "index": "not_analyzed" }}},
"customer_id": { "type": "string", "index": "not_analyzed"}
}
}
}
}

POST _bulk
{"create": {"_index": "test_users", "_type": "test_user" }}
{"name": "Arnie Metz PhD", "user_id": "CL_000960", "email_id": "streich.anjelica@gmail.com", "customer_id": "CL_2135514566_1427476813"}
{"create": {"_index": "test_users", "_type": "test_user" }}
{"name": "Ms. Princess Bernhard", "user_id": "CL_000972", "email_id": "obatz@yahoo.com", "customer_id": "CL_2135514566_1427476810"}

# returns two results.
GET test_users/test_user/_search
{
"query": {
"filtered" : {
"filter" : {
"terms": {
"user_id": ["CL_000960","CL_000972"]
}
}
}
}
}

您需要做的另一件事是在elasticsearch.yml配置文件中设置 index.query.bool.max_clause_count: 12000(或其他一些大数字),然后重新启动实例。否则你会得到 TooManyClauses[maxClauseCount is set to 1024];
在试验了我自己的ElasticSearch实例之后,在条件数组中传递10,000个项目大约需要1.5秒,以返回每组25个结果。这是在具有4核,3.40 GHz处理器和8 GB RAM的台式机工作站上运行的单个节点。因此,您可能需要考虑扫描和滚动类型查询。

关于elasticsearch - Elasticsearch 查找多个精确值查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614289/

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