我是ElasticSearch的初学者,我有一个使用ElasticSearch在给定食物或水果中寻找成分的应用程序...
如果用户使用例如磁带,我将面临评分问题:"Vitamine d"
ElasticSearch会给出得分最高的"vitamine"
短语,即使该短语"Vitamine D"
存在且通常应具有最高分数。
我看到如果我的情况下的第二个单词"d"
只是一个字母,那么 flex 搜索将忽略它。
我做了另一个例子:"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"
]
}
}
我可以对其进行哪些修改以使其起作用?
非常感谢。
最佳答案
如果可以识别成分,建议您在单独的字段“成分”中为它们建立索引,并将其类型设置为keyword
。这样,您可以使用术语过滤器,甚至可以运行聚合。
您可能已经用这种方式对文档建立了索引,在这种情况下,如果您使用的是默认映射,则只需对your_field_name.keyword
运行查询。
如果没有将成分索引为数组,则应查看elasticsearch analyzers以选择或构建正确的成分。
关于elasticsearch - ElasticSearch忽略只有一个字母的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644537/