仅当查询包含object';s场
我读过关于匹配和多词查询的文章,但似乎我需要做一些不同的事情 假设我有以下查询:“这是一个测试”,我想在一个名为“text”的字段中找到该查询。我想得到与该查询中的一些匹配的对象(不管有多少个单词),但只需要那些查询值包含文本字段中每个单词的对象 查询示例:“这是一个测试”。我想得到这些对象:仅当查询包含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"
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"]
}
}
}
}