gpt4 book ai didi

elasticsearch - Elasticsearch术语查询值数组

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

我有关于ElasticSearch索引的数据,看起来像这样

 {
"title": "cubilia",
"people": [
"Ling Deponte",
"Dana Madin",
"Shameka Woodard",
"Bennie Craddock",
"Sandie Bakker"
]
}

我有办法搜索所有名字开头的人吗
“ling”(不区分大小写),并获得正确区分大小写的专有名词“Ling Deponte”而不是“ling deponte”?
我发现可以以任何方式更改索引上的映射。

编辑完成了我想要的,但确实是糟糕的查询:
{
"size": 0,
"aggs": {
"person": {
"filter": {
"bool":{
"should":[
{"regexp":{
"people.raw":"(.* )?[lL][iI][nN][gG].*"
}}
]}
},
"aggs": {
"top-colors": {
"terms": {
"size":10,
"field": "people.raw",
"include":
{
"pattern": ["(.* )?[lL][iI][nN][gG].*"]
}
}
}
}
}
}
}

people.raw未进行分析

最佳答案

是的,您可以利用Elasticsearch的全文功能在不使用正则表达式的情况下进行操作。

GET /test/_search
{
"query": {
"match_phrase": {
"people": "Ling"
}
}
}

注意:在这种情况下,它也可以是 matchmatch_phrase_prefixmatch_phrase*查询表示文本中值的顺序。 match只是寻找任何值。由于您只有一个值,因此几乎没有任何关系。

问题是您不能将文档响应仅限于该名称,因为搜索API返回文档。话虽如此,您可以使用 nested文档并通过 inner_hits获得所需的行为。

您不愿 而不愿想要做通配符前缀,因为它根本无法大规模使用。用SQL术语来说,这就像进行全表扫描一样。您实际上失去了倒排索引的优势,因为它必须完全遍历才能找到实际的起点。

但是,将两者结合起来应该效果很好。在这里,我使用查询将结果简化为您感兴趣的内容,然后使用内部聚合仅基于值进行包含。
{
"size": 0,
"query": {
"match_phrase": {
"people": "Ling"
}
}
"aggs": {
"person": {
"terms": {
"size":10,
"field": "people.raw",
"include": {
"pattern": ["(.* )?[lL][iI][nN][gG].*"]
}
}
}
}
}

关于elasticsearch - Elasticsearch术语查询值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069627/

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