ElasticSearch忽略单个字母的单词

时间:2018-06-01 13:26:38

标签: elasticsearch

我是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"
    ]
  }
}

我可以修改哪些内容才能使其正常工作?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

如果你能识别你的成分,我建议你在一个单独的字段“成分”上将它们编入索引,将它的类型设置为keyword。这样您就可以使用术语过滤器,甚至可以运行聚合。

您可能已经将文档编入索引,在这种情况下,如果您使用默认映射,只需针对your_field_name.keyword运行查询。

如果您没有将您的成分编入索引作为数组,那么您应该查看elasticsearch analyzers以选择或构建正确的数据。