如何匹配Elasticsearch中搜索查询中的单个单词

时间:2017-09-17 07:24:52

标签: c# elasticsearch kibana nest

假设我有一个名为complexId的字段,它的值包含特殊字符:fruit/1a.445/2.10.mango。因此,当我搜索Complex ID fruit/1a.445/2.10.mango之类的内容时,我应该能够得到结果。

我想要的是,我希望弹性搜索能够匹配这3个单词中的至少一个:

1. Complex 
2. ID 
3. fruit/1a.445/2.10.mango

例如: - 以下是我的两份文件:

{
   "name": "Joe",
   "complexId": "fruit/1a.445/2.10.mango"
},
{
   "name": "Matt",
   "complexId": "car/35.6a5/chevy.20"
}

用户搜索blah blah blah fruit/1a445/mango blah blah之类的内容,他应该得到以下结果:

{
   "name": "Matt",
   "complexId": "fruit/1a.445/2.10.mango"
}

我试过了,但它没有给我任何结果:

{
   "query": {
      "bool": {
          "match" : 
          {
              complexId : "blah blah blah fruit/1a.445/2.10.mango blah blah"
          }
      }
   }
}

字段complexId有一个标准分析器。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

标准分析器在您的情况下不起作用。

由于您有特殊字符,因此在存储到ElasticSearch时会被忽略。请尝试使用whitespace分析器。

POST _analyze
{
  "analyzer": "whitespace",
  "text": "blah blah blah fruit/1a.445/2.10.mango blah blah"
}

使用不同的分析仪,找到最适合您需求的分析仪。

您也可以创建自己的自定义分析器。