仅当查询包含object';s场

仅当查询包含object';s场,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我读过关于匹配和多词查询的文章,但似乎我需要做一些不同的事情 假设我有以下查询:“这是一个测试”,我想在一个名为“text”的字段中找到该查询。我想得到与该查询中的一些匹配的对象(不管有多少个单词),但只需要那些查询值包含文本字段中每个单词的对象 查询示例:“这是一个测试”。我想得到这些对象: obj1: {"text":"this is a test"} obj2: {"text":"this is a"} obj3 : { "text" : "is a" } obj4 : { "text"

我读过关于匹配和多词查询的文章,但似乎我需要做一些不同的事情

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

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

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有可能实现这一点吗?

这是一种黑客行为,但我能够让它与一个:

我原以为有更好的方法,但没能马上想出一个。在生产中使用脚本可能会有问题,除非您的ES群集位于某种身份验证墙后面

总之,下面是我用来测试它的代码:

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"]
         }
      }
   }
}