弹性搜索 - 在单个字段中搜索多个查询

时间:2015-04-29 06:21:33

标签: ruby-on-rails ruby elasticsearch

我是弹性搜索的新手。我的clearance表格中有一个字段名称users,我正在尝试根据此结果过滤我的结果。

match: {
          clearance: {
            query: 'None',
            type: 'phrase'
          }
        }

当我给出上述匹配查询时,我得到3个结果。我想要的是再传递一个字符串和None。例如,我想找到具有许可NoneFirst Level

的用户

我试过了。

multi_match: {
              clearance: {
                query: 'None OR First Level',
                type: 'phrase'
              }
            }

但最终出现了一些错误。请帮忙。如果我的问题是错误的,请纠正我。

1 个答案:

答案 0 :(得分:0)

一种方法是在映射中使用not_analyzed字段进行清除并使用术语过滤器。

示例:

create or replace function getdate
RETURN VARCHAR2 IS
v_datevalue date;
begin
v_datevalue := '01-APR-2015';
return (cast(v_datevalue as varchar2));
end;
/

一些测试数据:

PUT test
{
  "mappings": {
    "e1":{
      "properties": {
        "clearance":{
          "type": "string",
          "index": "not_analyzed"
        }
      }
    }
  }
}

现在查询部分:

PUT test/e1/1
{
  "clearance":"None"
}
PUT test/e1/2
{
  "clearance":"First Level"
}
PUT test/e1/3
{
  "clearance":"Second Level"
}

结果验证:

GET test/e1/_search
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "terms": {
          "clearance": [
            "None",
            "First Level"
          ],
          "execution": "or"
        }
      }
    }
  }
}