Elasticsearch在测试服务器上的不同行为

时间:2016-09-19 09:09:50

标签: ruby-on-rails elasticsearch

我的弹性搜索目前在不同的环境中提供不同的结果,即使我正在进行相同的搜索。 它在我的localhost上的开发工作正常,但它不能在我的测试服务器上工作(没有给出预期的记录,是的,我确实有数据库播种)。

据我所知,这应该做的是检查它是否在三个匹配中找到一个匹配,并且它是否确实返回所有匹配。

我正在运行Windows 10,只使用rails s

服务器正在运行Ubuntu 16,使用nginx和unicorn。

这是我的映射:(注意:我不完全确定分析仪是否做了什么,但它不应该重要)

settings index: { number_of_shards: 1 } do
  mappings dynamic: 'true' do
    indexes :reportdate, type: 'date'
    indexes :client do
      indexes :id
      indexes :name, analyzer: 'dutch'
    end
    indexes :animal do
      indexes :id
      indexes :species, analyzer: 'dutch'
      indexes :other_species, analyzer: 'dutch'
      indexes :chip_code
    end
    indexes :locations do
      indexes :id
      indexes :street, analyzer: 'dutch'
      indexes :city, analyzer: 'dutch'
      indexes :postalcode
    end
  end
end

这是我的搜索:

__elasticsearch__.search({
  sort: [
    { reportdate: { order: "desc" }},
    "_score"
  ],
  query: {
    bool: {
      should: [
        { multi_match: {
          query: query,
          type: "phrase_prefix",
          fields: [ "other_species", "name"]
        }},
        { prefix: {
          chip_code: query
        }},
        { match_phrase: {
          "_all": {
            query: query,
            fuzziness: "AUTO"
          }
        }}
      ]
    }
  }
})

编辑#1:注意:我对于ruby on rails相当新,大约2周前开始,对旧项目进行维护工作,他们还要求搜索功能。

1 个答案:

答案 0 :(得分:0)

原来问题是我使用外表(好吧,有点)和嵌套映射(可能是这个)。

这里有适用于制作和本地的更新代码:

__elasticsearch__.search({
  sort: [
    { reportdate: { order: "desc" }},
    "_score"
  ],
  query: {
    bool: {
      should: [
        { multi_match: {
          query: query,
          type: "phrase_prefix",
          fields: [ "animal.other_species", "client.name"]
        }},
        { prefix: {
          "animal.chip_code": query
        }},
        { match_phrase: {
          "_all": {
            query: query,
            fuzziness: "AUTO"
          }
        }}
      ]
    }
  }
})

不确定为什么它不需要动物和客户父母预先在本地工作,而在我的测试服务器上确实需要它们。然而,这两种方式都有效。