Как создать и добавить значения в стандартный строчный анализатор в упругом поиске - PullRequest
0 голосов
/ 24 сентября 2018

Последние несколько дней я ходил по домам, пробуя разные порядки, но не могу понять, почему он не работает.

Я пытаюсь создать индекс в 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"
      }
  }
}
}

Заранее спасибо!

1 Ответ

0 голосов
/ 24 сентября 2018

первым делом сначала вы устанавливаете свой анализатор на поле title вместо поля text (поскольку ваш поиск выполняется по свойству text, и поскольку вы индексируете документ только со свойством text)

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

попробуйте

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

и держите нас в курсе;)

...