gpt4 book ai didi

elasticsearch - ElasticSearch:关键字数据类型字段与值数组完全匹配

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

在ElasticSearch中,我为电子邮件字段和标题字段提供了映射,如下所示:

  {
"person": {
"mappings": {
"_doc": {
"email": {
"type": "keyword",
"boost": 80
},
"title": {
"type": "text",
"boost": 70
}
}
}
}

每个人可以拥有多个电子邮件地址和标题。因此,我将值存储在数组中。
我使用query_string搜索具有电子邮件地址和/或标题的人员。电子邮件地址必须完全匹配。
我已经用以下数据索引了文档。在Kibana中调用 GET person/_search将在结果中产生以下文档。
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "person",
"_type": "_doc",
"_id": "101",
"_score": 1,
"_source": {
"title": """["Actor", "Hero", "Model"]""",
"email": """["jdepp@hotmail.com", "johnny@hollywood.com", "jdepp@gmail.com", "johnny.depp@yahoo.com"]""",
"SEARCH_ENTITY": "PERSON"
}
}
]
}
}
现在,当我添加一些电子邮件搜索参数时,不会在结果中找回文档。记住电子邮件是关键字类型。
请求:
GET person/_search
{
"query" : {
"query_string" : {
"query" : "SEARCH_ENTITY:PERSON AND (email: (johnny.depp@yahoo.com))"
}
}
}
响应:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
但是,同样的查询适用于文本类型的标题字段。
请求:
GET person/_search
{
"query" : {
"query_string" : {
"query" : "SEARCH_ENTITY:PERSON AND (title: ((actor)))"
}
}
}
响应:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 20.137747,
"hits": [
{
"_index": "person",
"_type": "_doc",
"_id": "101",
"_score": 20.137747,
"_source": {
"ID": "101",
"title": """["Actor", "Hero", "Model"]""",
"email": """["jdepp@hotmail.com", "johnny@hollywood.com", "jdepp@gmail.com", "johnny.depp@yahoo.com"]"""
}
}
]
}
}

有人可以告诉我我需要做什么才能使关键字类型的电子邮件字段有效吗?
注意:如果我只存储一个电子邮件地址而不使用数组,则可以正常工作。
谢谢。

最佳答案

在为文档建立索引之前,请确保像这样解析jsont_code和title中的json数组字符串:

POST person/_doc/101
{
"title": [
"Actor",
"Hero",
"Model"
],
"email": [
"jdepp@hotmail.com",
"johnny@hollywood.com",
"jdepp@gmail.com",
"johnny.depp@yahoo.com"
],
"SEARCH_ENTITY": "PERSON"
}
映射无需更改-只需更改字段值即可。

关于elasticsearch - ElasticSearch:关键字数据类型字段与值数组完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64759682/

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