lucene – 使用“和”运算符搜索多个字段(但使用字段自己的分析器)

ElasticSearch版本:0.90.2

这是问题所在:我想在索引中找到文档,以便它们:

>匹配多个字段中的所有查询令牌
>使用字段自己的分析器

所以如果有4个文件:

{ "_id" : 1, "name" : "Joe Doe",     "mark" : "1", "message" : "Message First" }
{ "_id" : 2, "name" : "Ann",         "mark" : "3", "message" : "Yesterday Joe Doe got 1 for the message First"}
{ "_id" : 3, "name" : "Joe Doe",     "mark" : "2", "message" : "Message Second" }
{ "_id" : 4, "name" : "Dan Spencer", "mark" : "2", "message" : "Message Third" }

并且查询是“Joe First 1”它应该找到ID 1和2.即,它应该找到包含来自搜索查询的所有标记的文档,无论它们在哪个字段中(可能所有标记都在一个字段中,或者可能每个令牌都在自己的字段中).

一种解决方案是使用elasticsearch“_all”字段功能:这样它将我需要的所有字段(名称,标记,消息)合并为一个,我将能够用类似的东西查询它

"match": {
  "_all": {
    "query": "Joe First 1",
    "operator": "and"
  }
}

但是这样我只能为“_all”字段指定分析器.我需要“名称”和“消息”字段来设置不同的标记器/标记过滤器(假设名称将具有语音分析器和消息将具有一些词干标记过滤器).

有没有办法做到这一点?

最佳答案 感谢elasticsearch集团的员工,这里有解决方案…非常简单需要说:)

我需要做的就是使用query_string查询http://www.elasticsearch.org/guide/reference/query-dsl/query-string-query/和default_operator = AND,它会做到这一点:

{
  "query": {
    "query_string": {
      "fields": [
        "name",
        "mark",
        "message"
      ],
      "query": "Joe First 1",
      "default_operator": "AND"
    }
  }
}
点赞