gpt4 book ai didi

elasticsearch - Elasticsearch 中的条件查询搜索

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

我在 Elasticsearch 索引/集群中有以下文档

[
{id: 1, firstName: 'User', lastName: 'John', nickName: 'Smith'},
{id: 2, firstName: 'Test', lastName: 'John', nickName: 'Andrew'},
{id: 3, firstName: 'Test', lastName: 'Zch', nickName: 'John'},
{id: 4, firstName: 'Test', lastName: 'Mason', nickName: 'John'},
{id: 5, firstName: 'John', lastName: 'Doe'},
//should not search this
{id: 6, firstName: 'John', lastName: 'Glow', nickName: 'NonSearchText'}

];

我的搜索要求类似于手机中的联系人搜索:

相关搜索应首先使用nickName,然后是lastName。如果不存在昵称,则应使用ASC排序顺序针对firstName进行搜索

搜索文本:John

因此,查询搜索结果应为
[
// search with nickName as higher relevance and then sorted it
{id: 4, firstName: 'Test', lastName: 'Mason', nickName: 'John'},
{id: 3, firstName: 'Test', lastName: 'Zch', nickName: 'John'},
// search with lastName as second higher relevance and then sorted it
{id: 2, firstName: 'Test', lastName: 'John', nickName: 'Andrew'},
{id: 1, firstName: 'User', lastName: 'John', nickName: 'Smith'},
// search with firstName as nickName is null
{id: 5, firstName: 'John', lastName: 'Doe'},

// and omitted one record

];

查询写成:
{
"sort" : [

{"lastName.keyword": "asc"},
{"nickName.keyword": "asc"}
],
"query": {
"bool": {
"must": [{

"query_string": {
"query": "John*",
"analyze_wildcard": "true",
"fields": ["nickName^3", "lastName^2"]

}
}]
}
}


}

我无法涵盖以下情况:
  • 如果存在昵称,并且即使firstName与搜索文本匹配,则基于条件的搜索也不应在搜索
  • 中包括该文档
  • 如果不存在昵称,则按名字搜索

  • 任何帮助表示赞赏。

    最佳答案

    询问

    {
    "query": {
    "bool": {
    "should": [
    {
    "multi_match": {
    "query": "john",
    "fields": [
    "nickName^3",
    "lastName^2"
    ]
    }
    },
    {
    "bool": {
    "must_not": [
    {
    "exists": {
    "field": "nickName"
    }
    }
    ],
    "must": [
    {
    "match": {
    "firstName": "john"
    }
    }
    ]
    }
    }
    ]
    }
    },
    "sort": [
    {
    "_score": {
    "order": "desc"
    }
    },
    {
    "lastName.keyword": "asc"
    },
    {
    "nickName.keyword": "asc"
    }
    ]
    }

    结果
    "hits" : [
    {
    "_index" : "index73",
    "_type" : "_doc",
    "_id" : "MxvATnIB8mx5yKbJqLHv",
    "_score" : 2.6264062,
    "_source" : {
    "id" : 4,
    "firstName" : "Test",
    "lastName" : "Mason",
    "nickName" : "John"
    },
    "sort" : [
    2.6264062,
    "Mason",
    "John"
    ]
    },
    {
    "_index" : "index73",
    "_type" : "_doc",
    "_id" : "MhvATnIB8mx5yKbJmrG2",
    "_score" : 2.6264062,
    "_source" : {
    "id" : 3,
    "firstName" : "Test",
    "lastName" : "Zch",
    "nickName" : "John"
    },
    "sort" : [
    2.6264062,
    "Zch",
    "John"
    ]
    },
    {
    "_index" : "index73",
    "_type" : "_doc",
    "_id" : "MRvATnIB8mx5yKbJh7F7",
    "_score" : 2.059239,
    "_source" : {
    "id" : 2,
    "firstName" : "Test",
    "lastName" : "John",
    "nickName" : "Andrew"
    },
    "sort" : [
    2.059239,
    "John",
    "Andrew"
    ]
    },
    {
    "_index" : "index73",
    "_type" : "_doc",
    "_id" : "MBvATnIB8mx5yKbJcbG1",
    "_score" : 2.059239,
    "_source" : {
    "id" : 1,
    "firstName" : "User",
    "lastName" : "John",
    "nickName" : "Smith"
    },
    "sort" : [
    2.059239,
    "John",
    "Smith"
    ]
    },
    {
    "_index" : "index73",
    "_type" : "_doc",
    "_id" : "NBvATnIB8mx5yKbJubHP",
    "_score" : 1.0296195,
    "_source" : {
    "id" : 5,
    "firstName" : "John",
    "lastName" : "Doe"
    },
    "sort" : [
    1.0296195,
    "Doe",
    null
    ]
    }
    ]

    关于elasticsearch - Elasticsearch 中的条件查询搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005860/

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