ElasticSearch を実行していますが、スペースを含む用語を検索するときに問題が発生しています。具体的な例: JM ブルーノという人物がいますが、これを検索しても結果は返されません。この正確な用語を検索すると結果が返されたことを漠然と覚えていますが、今は再現できません。
スペースと「\」をトークナイザー パターンに追加しようとしましたが、うまくいきませんでした。ES 設定は次のとおりです (Ruby on Rails アプリケーションで Tire gem を使用)
module Search
def self.included base
base.send :include, Tire::Model::Search
base.send :include, Tire::Model::Callbacks
base.class_eval do
settings analysis: {
filter: {
ngram: {
type: 'nGram',
max_gram: 12,
min_gram: 3
},
url_stop: {
type: "stop",
stopwords: %w[http https]
}
},
tokenizer: {
url_email_tokenizer: {
pattern: '[^\w\-\.@]+',
type: 'pattern'
}
},
analyzer: {
url_analyzer: {
tokenizer: "url_email_tokenizer",
filter: %w[url_stop ngram],
type: "custom"
},
name_analyzer: {
tokenizer: 'url_email_tokenizer',
filter: 'ngram',
type: 'custom'
}
}
}
end
end
end
これらのトークナイザーを使用して、ドメイン名と電子メール アドレスも検索します。