【问题标题】:How to match a single word from a search query in Elasticsearch如何在 Elasticsearch 中匹配搜索查询中的单个单词
【发布时间】:2018-02-25 22:49:21
【问题描述】:

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

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

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 字段具有标准分析器。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# elasticsearch kibana nest


    【解决方案1】:

    标准分析器不适用于您的情况。

    由于您有特殊字符,因此在存储到 ElasticSearch 时将被忽略。尝试改用whitespace Analyzer。

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

    尝试使用不同的分析器并找到最适合您需求的分析器。

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

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2016-05-15
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多