Почему запрос «apache» не работает в приведенном ниже документе вasticsearch? - PullRequest
0 голосов
/ 21 января 2019

У меня есть простой текстовый документ, который выглядит следующим образом при получении его командой: curl -X GET "localhost:9200/customer/_doc/1"

{"_index":"customer","_type":"_doc","_id":"1","_version":1,"found":true,"_source":
{
  "description": "Sun Java Plug-In 1.4 through 1.4.2_02 allows remote attackers to repeatedly access the floppy drive via the createXmlDocument method in the org.apache.crimson.tree.XmlDocument class, which violates the Java security model."
}
}

Когда я делаю запрос к указанному выше документу с указанным ниже эластичным поиском, он не дает мне совпадений, мне интересно, почему?

{
    "query": {
        "match" : {
            "description": "apache"
        }
    }
}

и этот запрос будет успешным, если я заменю apache на createXmlDocument или org.apache.crimson.tree.XmlDocument. Мое первоначальное понимание было org.apache.crimson.tree.XmlDocument будет разделен на 5 слов: org, apache, crimson, tree и XmlDocument, но на данный момент я думаю, что, возможно, весь org.apache.crimson.tree.XmlDocument сохранен как это при упругом поиске. Если это так, то почему и как я могу получить желаемый результат?

1 Ответ

0 голосов
/ 21 января 2019

Если вы ничего не определяете, будет использоваться стандартный анализатор .

Стандартный анализатор создаст этот токен:

{
  "token" : "org.apache.crimson.tree.xmldocument",
  "start_offset" : 140,
  "end_offset" : 175,
  "type" : "<ALPHANUM>",
  "position" : 22
}

Итак, ваш поискничего не находит.Если вы используете Pattern Analyzer , будет создан токен apache.Шаблон по умолчанию \W+ (каждое слово) работает для вас.

Вы можете проверить это с помощью

curl -XGET "http://localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
  "text": "Sun Java Plug-In 1.4 through 1.4.2_02 allows remote attackers to repeatedly access the floppy drive via the createXmlDocument method in the org.apache.crimson.tree.XmlDocument class, which violates the Java security model.",
  "analyzer": "pattern"
}'

Определите явное сопоставление для вашего индекса, например:

PUT customer
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "_doc": {
      "properties": {
        "description": {
          "type": "text",
          "analyzer": "pattern"
        }
      }
    }
  }
}

Если вы снова запустите запрос, вы получите, например:

  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "customer",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "description" : "Sun Java Plug-In 1.4 through 1.4.2_02 allows remote attackers to repeatedly access the floppy drive via the createXmlDocument method in the org.apache.crimson.tree.XmlDocument class, which violates the Java security model."
        }
      }
    ]
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...