私は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