我们正在运行ElasticSearch,并且在搜索包含空格的术语时遇到一些问题。一个具体的例子:有一个叫JM Bruno的人,但是当搜索这个时,没有结果被返回。我隐约记得搜索这个确切的术语确实会返回结果,但我现在无法再现。ElasticSearch空间术语
我试着给我的标记模式添加一个空格以及“\”,但没有多少运气。在ES设置如下(使用轮胎的宝石在Ruby on Rails应用程序)
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\-\[email protected]]+',
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
我们使用这些断词搜索域名和电子邮件地址,以及。
它返回一个400码与错误“未能找到分析仪”。谈到分析仪时,ES不知道我用于轮胎宝石中的设置? – HannesFostie
尝试MyModel.index.analyze“我的文本”,分析器:“name_analyzer” – karmi
想通了我需要添加索引,但回应对我来说没有多大意义。当然,它发现了一堆令牌,因为我期望它们被ngram标记,但这并不能解释为什么它不包含在搜索中(至少,它不是我清楚) – HannesFostie