我正在使用 elasticsearch-model gem 构建 Rails Web 应用程序。我想为我的 Place 模型构建带有过滤功能的搜索查询。我成功地按名称进行搜索,但是我希望能够用城市过滤我的搜索(在这个例子中是伦敦)。
现在我的查询看起来像这样:
"query": {
"bool": {
"must": {
"match": {
"name": {
"query": term,
"operator": "and",
"fuzziness": 1
}
}
},
"filter": {
"term": {
"city": "London"
}
}
}
}
而不是我简单的调用Place.search("here goes query").records.to_a
没有过滤器部分搜索工作正常,但是当我添加过滤器时,我没有得到任何结果。
这是地方搜索的映射:
settings analysis: {
filter: {
ngram_filter: {
type: "nGram",
min_gram: 2,
max_gram: 20
}
},
analyzer: {
ngram_analyzer: {
type: "custom",
tokenizer: "standard",
filter: [
"lowercase",
"asciifolding",
"ngram_filter"
]
},
whitespace_analyzer: {
type: "custom",
tokenizer: "whitespace",
filter: [
"lowercase",
"asciifolding"
]
}
}
} do
mappings dynamic: 'false' do
indexes :name,
type: "string",
analyzer: "ngram_analyzer",
search_analyzer: "whitespace_analyzer"
这是我用来查看如何过滤的链接:Elasticsearch doc