анализатор отображения elasticsearch - GET не получает результата

Я пытаюсь создать анализатор, который заменяет специальный символ пробелом и преобразует его в верхний регистр. затем, если я хочу искать строчными буквами, это также должно работать.

Анализатор отображения:

soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl -XPUT 'http://localhost:9200/aida' -d '{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "char_filter": [
            "my_char_filter"
          ],
          "filter": [
            "uppercase"
            ]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "pattern_replace",
          "pattern": "(\\d+)-(?=\\d)",
          "replacement": "$1 "
        }
      }
    }
  }
}
'
{"acknowledged":true}


soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl -XPOST 'http://localhost:9200/aida/_analyze?pretty' -d '{
"analyzer":"my_analyzer",
"text":"My name is Soun*arya?jwnne&yuuk"
}'

Это правильно токенизирует слова, заменяя специальный символ пробелом. Теперь, если я ищу слово из текста, это не дает мне никакого результата.

soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl -XGET 'http://localhost:9200/aida/_search' -d '{
"query":{
"match":{
"text":"My"
}
}
}'

Я не получаю никакого результата из приведенного выше запроса GET. Получение результата вроде:

soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl -XGET 'http://localhost:9200/aida/_search' -d '{
"query":{
"match":{
"text":"my"
}
}
}'
{"took":5,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

Кто-нибудь может мне с этим помочь! Благодарю вас!


person Soundarya Thiagarajan    schedule 23.09.2016    source источник
comment
Глупый вопрос, но вы проиндексировали какие-либо данные после создания индекса? Вызов _analyze ничего не индексирует, а просто показывает, как будет анализироваться текст. Я думаю, что это та же проблема, что и в вашем другой вопрос   -  person Val    schedule 23.09.2016
comment
да, та же проблема. не могли бы вы сказать мне, как я могу решить эту проблему   -  person Soundarya Thiagarajan    schedule 23.09.2016


Ответы (1)


Похоже, вы не проиндексировали какие-либо данные после создания индекса. Вызов _analyze ничего не индексирует, а просто показывает, как будет анализироваться контент, который вы отправляете в ES.

Во-первых, вам нужно создать свой индекс, указав сопоставление, в котором вы используете определенный вами анализатор:

curl -XPUT 'http://localhost:9200/aida' -d '{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "char_filter": [
            "my_char_filter"
          ],
          "filter": [
            "uppercase"
            ]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "pattern_replace",
          "pattern": "(\\d+)-(?=\\d)",
          "replacement": "$1 "
        }
      }
    }
  },
  "mappings": {                        <--- add a mapping type...
    "doc": {
      "properties": {
        "text": {                      <--- ...with a field...
          "type": "string",
          "analyzer": "my_analyzer"    <--- ...using your analyzer
        }
      }
    }
  }
}'

Затем вы можете проиндексировать новый реальный документ:

curl -XPOST 'http://localhost:9200/aida/doc' -d '{
   "text": "My name is Soun*arya?jwnne&yuuk"
}'

Наконец, вы можете искать:

curl -XGET 'http://localhost:9200/aida/_search' -d '{
  "query":{
    "match":{
      "text":"My"
    }
  }
}'
person Val    schedule 23.09.2016
comment
Потрясающий. Теперь это работает. Но есть небольшой вопрос - он индексирует отлично, и поиск также выдает мне результаты. Если я ищу, например, имя в текстовом поле - я все равно получаю результат только со специальными символами. Я не могу получить результат, полученный на втором этапе (результат после индексации документа) - person Soundarya Thiagarajan; 23.09.2016
comment
Исходный документ никогда не будет изменен ES, текст будет проанализирован, токенизирован и проиндексирован, но возвращенный документ всегда будет содержать то же самое содержимое, что и тот, который вы проиндексировали. - person Val; 23.09.2016
comment
Круто, рад, что помогло! - person Val; 23.09.2016