我的弹性搜索目前在不同的环境中提供不同的结果,即使我正在进行相同的搜索。 它在我的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周前开始,对旧项目进行维护工作,他们还要求搜索功能。
答案 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"
}
}}
]
}
}
})
不确定为什么它不需要动物和客户父母预先在本地工作,而在我的测试服务器上确实需要它们。然而,这两种方式都有效。