job_title フィールドを持つテーブルがあります。
あいまい検索を作成して、ユーザーがクエリ キーワードのスペルを間違えた場合でも結果を取得できるようにしたいと考えています。
たとえば、job_title として「Android 開発者」を含む多くのレコードがあります。
ユーザーが間違った検索Job.es_qsearch("Andoirddd")
を発行した場合、次の助けを借りて同様に機能するはずですNGRAM_ANALYZER
ただし、間違ったキーワードから結果を得ることができました。
入力したときにのみ結果を取得できますJob.es_qsearch("Android")
期待どおりの検索結果を得るにはどうすればよいですか。
ありがとう
ジョブ.rb
NGRAM_ANALYZER = {analysis: {
filter: {
autocomplete_filter: {
type: "edge_ngram",
min_gram: 3,
max_gram: 20
}
},
analyzer: {
ngram_analyzer: {
type: :custom,
tokenizer: :standard,
filter: [
:lowercase,
:autocomplete_filter
]
}
}
}}
settings NGRAM_ANALYZER do
mappings do
indexes :job_title, include_in_all: 'ngram_analyzer'
indexes :description, include_in_all: 'ngram_analyzer'
end
end
def self.es_qsearch(*args, &block)
q_params = {
multi_match: {
query: "*#{args}*",
fields: ['job_title^5', 'description']
}
}
__elasticsearch__.search(
{
query: q_params,
}
)
end
ファジークエリを使用しましたが、まだ機能していません
ファジー クエリは、このクエリを ES 検索に送信しました
{:index=>"jobs",
:type=>"job",
:body=>{:query=>{:bool=>{:must=>[{:fuzzy=>{:description=>{:value=>["electrical"], :fuzziness=>2}}}]}}, :size=>200}},
あいまいクエリ 1: 機能しない
"bool": {
"must": [
{
"fuzzy": {
"description": {
# min_similarity: 0.4,
"value": args,
# prefix_length: 0,
"fuzziness": 2
}
},
}]
}
あいまいクエリ 1: 機能しない
"fuzzy": {
"description": {
# min_similarity: 0.4,
"value": args,
# prefix_length: 0,
"fuzziness": 2
}
},