多个指数的完成建议

时间:2018-03-03 15:23:07

标签: elasticsearch

ElasticSearch 6.x不支持单个索引中的多个类型映射。所以我有2个索引:

  • 位置
  • 邮政编码

我希望使用两个索引具有自动完成功能(我使用完成建议器)。有可能吗?

这是我映射location索引的示例:

{
  "location": {
    "mappings": {
      "location": {
        "properties": {
          "id": {
            "type": "long"
          },
          "name": {
            "type": "text"
          },          
          "suggest": {
            "type": "completion",
            "analyzer": "simple",
            "preserve_separators": false,
            "preserve_position_increments": false,
            "max_input_length": 50
          }
        }
      }
    }
  }
}

postcode索引:

{
  "postcode": {
    "mappings": {
      "postcode": {
        "properties": {
          "code": {
            "type": "text"
          },
          "suggest": {
            "type": "completion",
            "analyzer": "simple",
            "preserve_separators": true,
            "preserve_position_increments": true,
            "max_input_length": 50
          }
        }
      }
    }
  }
}

如果我只是在请求中跳过索引名称,则可以执行请求,例如

POST _search
{
  "suggest": {
    "suggestion": {
      "prefix": "abc",
      "completion": {
        "field": "suggest"
      }
    }
  }
}

它在两个索引中搜索但结果不正确。例如,在之前的请求中,我们要搜索的值以abc开头。如果location索引包含许多值为abc的文档,例如abcdabcde,即使广告中包含确切的值postcode,回复也不会包含来自abc索引的值。

编辑:

我对多个索引的错误行为表示不对。如果我们只使用一个索引(例如位置)并再推出一个具有建议值abc的文档,那么我们将看到相同的行为。这是因为所有结果都具有相同的score = 1

那么如何才能为完全匹配得分更高?

我发现这张已关闭的机票(https://github.com/elastic/elasticsearch/issues/4759),但我不明白我应该怎么做以达到适当的行为?它没有开箱即用。

0 个答案:

没有答案