【问题标题】:ElasticSearch phrase suggestor randomly returns 0 resultsElasticSearch 短语建议器随机返回 0 个结果
【发布时间】:2016-10-05 20:46:37
【问题描述】:

我在 OS X 上使用 Node.JS 客户端运行 ElasticSearch 2.3.5。有时_suggest 端点会返回 0 个结果——这是随机发生的,例如在只有四个文档被索引的测试套件中。

建议者返回 0 个结果有什么原因吗?这导致我的测试有大约 50% 的时间失败。

测试套件经过以下步骤:

  • 创建一个新的空白索引
    • title: {type: 'string'} 的文档提供映射
  • 使用_bulk API 注入四个带有title 字段的文档。
    • 我传递refresh=true 以确保文档被编入索引。
  • 一个简单的测试查询文档。他们都在那里。
  • 请求针对明显拼写错误的建议。 通过或失败的概率为 50/50

如果没有人可以提出任何明显的建议,我将创建一个独立的示例应用程序来证明这一点。

一个观察:小写拼写错误(例如,alhpa 代表 alpha 有 100% 成功;只有在引入创造性拼写错误时才会发生失败,例如 viTOR 代表 victor。不过,我很可能会想象这种行为,因为错误来来去去...)


附加:这是我为 ElasticSearch API 编写的包装函数:

didYouMean(input) {
  return this.conn.suggest({
    index: this.indexName,
    type: 'customdoc',
    body: {
      titles: {
        text: input,
        phrase: {
          field: 'title',
          direct_generator: [{
            // Only needs to be one character
            // long to suggest a correction
            field: 'title',
            suggest_mode: 'always',
            min_word_length: 1,
          }],
          highlight: {
            pre_tag: '<strong><em>',
            post_tag: '</em></strong>',
          },
        },
      },
    },
  });
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    建议是按分片计算的。 你在这个索引中有多少个分片? 如果超过 1,您能否检查它是否发生在一个分片的索引上?

    【讨论】:

    • 集群中有五个分片。我无法使用 Elasticsearch-js 包装器来调整它。
    • 只能在创建索引时更改。您需要创建新索引,并将分片编号设置为 1,并将整个数据重新索引到这个新索引。以下是如何创建此类索引的文档:elastic.co/guide/en/elasticsearch/reference/current/…
    • 标记为已解决。通过 JS 库实现这一点很棘手,但我找到了一种方法。可以确认这会产生一致的结果——缺点是不再提供一些有用的短语建议。它们可能是由于跨分片的源文档随机复制而产生的,从而增加了它们的词频。
    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多