lucene - 使用 "and"运算符搜索多个字段(但使用字段自己的分析器)

标签 lucene elasticsearch

Elasticsearch 版本:0.90.2

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

  1. 匹配多个字段中的所有查询标记
  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 group 的人,这是解决方案......需要说的非常简单:)

我需要做的就是使用 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"
    }
  }
}

关于lucene - 使用 "and"运算符搜索多个字段(但使用字段自己的分析器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18114590/

相关文章:

elasticsearch - 如何在 Elasticsearch 重新索引无痛脚本中生成 UUID

java - 如何在 ElasticSearch 中添加分析器设置?

lucene - ElasticSearch 的模糊查询

elasticsearch - Elasticsearch中基于字段日期的索引

elasticsearch - 带有嵌套对象的 Elasticsearch 嵌套查询

具有 after_key 和大小的 ElasticSearch 复合聚合

lucene - 使用 Solr 进行语义分析

lucene - 是否有用于 Lucene 的 HTML 分析器/标记器?

elasticsearch - Elasticsearch 6.2 按查询分组

java - 在 Lucene 中将数字与字母分开