gpt4 book ai didi

elasticsearch - 仅当查询包含对象字段的所有单词时,才匹配查询返回记录

转载 作者:行者123 更新时间:2023-12-02 23:35:41 25 4
gpt4 key购买 nike

我阅读了有关匹配和多字查询的信息,但似乎我需要做一些不同的事情。

假设我有以下查询:“这是一个测试”,我想在一个名为“文本”的字段中找到该查询。我想获得与某些查询匹配的对象(与多少个单词无关),但只有那些查询值包含文本字段中每个单词的对象。

查询示例:“这是一个测试”。我想要那些对象:

obj1: {"text":"this is a test"}
obj2: {"text":"this is a"}
obj3 : { "text" : "is a" }
obj4 : { "text" : "test" }

但是,如果obj在文本字段中包含更多内容,则不会返回,例如:
obj5: {"text":"this is a test and something more"}

是否可以使用Elasticsearch做到这一点?

最佳答案

这有点像hack,但是我能够将它与script filter一起使用:

POST /test_index/_search
{
"query": {
"match": {
"text": "this is a test"
}
},
"filter": {
"script": {
"script": "for(val in doc[\"text\"].values){ if(!(val in terms)){ return false; }}; return true;",
"params": {
"terms": ["this", "is", "a", "test"]
}
}
}
}

我以为会有更好的方法来做到这一点,但当时还无法马上提出。除非您的ES群集位于某种身份验证墙的后面,否则在生产中使用脚本可能会出现问题。

无论如何,这是我用来测试的代码:

http://sense.qbox.io/gist/3929abc89d71ebf724e6121b1b5ba6da54501088

关于elasticsearch - 仅当查询包含对象字段的所有单词时,才匹配查询返回记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31636851/

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