我有一个Fr / En网站,我有一个"个人资料"模型,信息可以用英语或法语写成(我不知道哪一个)。考虑Mongoid的简单模型
class Profile
field :job_name
field :company_name
end
我希望对支持词干的工作名称进行智能搜索。所以基本上我想在该领域使用英语+法语分析器
我相信我已经为索引部分找到了一些东西,在那里我用两种语言分析字段:
mapping do
indexes :job_name, type: :string, fields: {
french: { type: :string, analyzer: 'french' },
english: { type: :string, analyzer: 'english' }
}
end
我在搜索上配置词干时遇到问题。我其实不是。我的默认搜索引擎使用多场匹配和每场增强,我真的不明白如何在分析器的基础上进行分类:
query: {
filtered: {
query: {
multi_match: {
query: query,
fields: [
"company_name^3",
"job_name^2",
],
type: "best_fields",
tie_breaker: 0.3
}
}
}
}
理想情况下,搜索" achat" (购买法语),引擎应返回作业名称包含的结果
它也适用于类似的英语单词
编辑:我的ES索引("不"正常?)
{
"mydb": {
"aliases": {},
"mappings": {
"profile": {
"properties": {
"company_name": {
"type": "string"
}
"job_name": {
"type": "string",
"index": "no",
"fields": {
"english": {
"type": "string",
"analyzer": "english"
},
"french": {
"type": "string",
"analyzer": "french"
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1469789941429",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "HHN-rWTTStCXDgQtJMTEPg",
"version": {
"created": "2030499"
}
}
},
"warmers": {}
}
}
答案 0 :(得分:1)
您可以使用通配符版本作为字段名称,multi_match
将使用每个子字段'分析器:
"fields": [
"job_name.*^2"
],