使用Elasticsearch 2.x在查询上下文和过滤器上下文之间进行逻辑OR

时间:2016-03-07 23:42:34

标签: elasticsearch

假设我有一个带有以下映射的索引:

Can't find file file.jpg

我索引一个简单的文档,如下所示:

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "full_text": {
          "type":  "string" 
        },
        "exact_value": {
          "type":  "string",
          "index": "not_analyzed" 
        }
      }
    }
  }
}

我想要的是创建一个可以逻辑表达的查询:

PUT my_index/my_type/1
{
  "full_text":   "This is the city where I live", 
  "exact_value": "MILAN"  
}

但我想在查询上下文中搜索full_text:CONTAINS('live') OR exact_value:CONTAINS('MILAN') ,而在过滤器上下文中搜索full_text

我尝试了以下查询,但它不起作用(用ROME替换MILAN是证明)

exact_value

提前致谢

3 个答案:

答案 0 :(得分:0)

我会试试这个:

POST my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "or": [
          {
            "term": {
              "exact_value": "MILAN"
            }
          },
          {
            "term": {
              "full_text": "live"
            }
          }
        ]
      }
    }
  }
}

但是,如果您想使用过滤器,请注意您不会得分。 这意味着搜索“live OR MILAN”将产生与“live OR ROMA”和“live”完全相同的响应

实际包含“live或MILAN”的文档可能不在第一位置

答案 1 :(得分:0)

尝试使用它:

<!-- Use whatever control you want here, or a separate resources
     file if you want to share across controls                   -->
<Window.Resources>
  <ContextMenu x:Key="MyMenu" DataContext="{Binding Path=PlacementTarget.Tag,RelativeSource={RelativeSource Self}}">
        <MenuItem Header="Open" Command="{Binding MenuDelegateCommand}"
                  IsEnabled="{Binding Path=OpenEnabled}"
                  CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
        <Separator />
        <MenuItem Header="Blah Attributes">
        <MenuItem Header="Properties" Command="{Binding MenuDelegateCommand}"
                  IsEnabled="{Binding Path=OpenEnabled}"
                  CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
  </ContextMenu>
......
</Window.Resources>

答案 2 :(得分:0)

我找到了可以使用Java API构建的解决方案

{
  "query" : {
    "bool" : {
      "should" : [ {
        "bool" : {
          "filter" : {
            "term" : {
              "exact_value" : "MILAN"
            }
          }
        }
      }, {
        "query_string" : {
          "query" : "live",
          "fields" : [ "full_text" ]
        }
      } ]
    }
  }
}