我是ElasticSearch的初学者,我有一个应用程序使用elasticSearch来寻找给定食物或水果中的成分......
如果用户使用例如磁带,我将面临评分问题:"Vitamine d"
即使短语"vitamine"
存在,ElasticSearch也会提供得分最高的"Vitamine D"
短语,通常它应该得分最高。
我看到如果我的案例中的第二个单词"d"
只是一个字母,那么弹性搜索将忽略它。
我做了另一个例子:"vitamine b12"
我得到了正确的分数。
以下是应用程序发送给服务器的查询:
{
"from": 0,
"size": 5,
"query": {
"bool": {
"must": [
{
"match": {
"constNomFr": {
"query": "vitamine d"
}
}
}
],
"should": [
{
"prefix": {
"constNomFr": {
"value": "vitamine d",
"boost": 2
}
}
}
]
}
},
"_source": {
"excludes": [
"alimentDtos"
]
}
}
我可以修改哪些内容才能使其正常工作?
非常感谢你。
答案 0 :(得分:0)
如果你能识别你的成分,我建议你在一个单独的字段“成分”上将它们编入索引,将它的类型设置为keyword
。这样您就可以使用术语过滤器,甚至可以运行聚合。
您可能已经将文档编入索引,在这种情况下,如果您使用默认映射,只需针对your_field_name.keyword
运行查询。
如果您没有将您的成分编入索引作为数组,那么您应该查看elasticsearch analyzers以选择或构建正确的数据。