我们正在运行 ElasticSearch,并且在搜索包含空格的术语时遇到了一些问题。一个具体的例子:有一个名叫 JM Bruno 的人,但是在搜索这个时没有返回任何结果。我隐约记得搜索这个确切的术语确实返回了结果,但我现在无法重现。
我尝试在我的标记器模式中添加一个空格和“\”,但运气不佳。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
我们也使用这些标记器来搜索域名和电子邮件地址。