如何在弹性搜索中创建和添加值到标准小写分析器

How to create and add values to a standard lowercase analyzer in elastic search

在过去的几天里,我一直在用这个进行各种尝试,但无法弄清楚为什么它不起作用。

我正在尝试使用与 "standard" 分析器相同但在存储记录时保留大写字符的分析器在 Elasticsearch 中创建索引。

我按如下方式创建分析器和索引:

PUT /upper
{
"settings": {
    "index" : {
        "analysis" : {
             "analyzer": {
                    "rebuilt_standard": {
                      "tokenizer": "standard",
                      "filter": [
                        "standard"   
                      ]
                }
            }
        }
    }
},
"mappings": {
    "doc": {
        "properties": {
          "title": { 
            "type": "text",
            "analyzer": "rebuilt_standard"
          }
        }
    }
}

}

然后添加两条记录这样测试...

POST /upper/doc
{
"text" : "TEST"
}

添加第二条记录...

POST /upper/doc
{
"text" : "test"
}

使用 /upper/_settings 给出以下结果:

{
  "upper": {
"settings": {
  "index": {
    "number_of_shards": "5",
    "provided_name": "upper",
    "creation_date": "1537788581060",
    "analysis": {
      "analyzer": {
        "rebuilt_standard": {
          "filter": [
            "standard"
          ],
          "tokenizer": "standard"
        }
      }
    },
    "number_of_replicas": "1",
    "uuid": "s4oDgdsFTxOwsdRuPAWEkg",
    "version": {
      "created": "6030299"
    }
  }
}
  }
}

但是当我使用以下查询进行搜索时,我仍然得到两个匹配项!大写和小写都表示我存储记录时没有应用分析器。

像这样搜​​索...

GET /upper/_search
{
  "query": {
    "term": {
      "text": {
        "value": "test"
      }
  }
}
}

提前致谢!

首先,您将分析器设置在 title 字段上而不是 text 字段上(因为您的搜索是在文本 属性 上进行的,并且您正在索引文档只有 text 属性)

"properties": {
    "title": { 
        "type": "text",
        "analyzer": "rebuilt_standard"
    }
}

尝试

"properties": {
    "text": { 
        "type": "text",
        "analyzer": "rebuilt_standard"
    }
}

并随时通知我们 ;)