Query String Query в Elasticsearch с - и *

elasticsearch lucene full-text-search sense

112 просмотра

3 ответа

У меня проблема с Query String Query в Elasticsearch. Я пишу здесь код Sense, чтобы повторить его.

POST myindex
POST myindex/mytype
    {
        "name":"t-shirt",
        "season": "2016-3"
    }

И я ищу:

POST myindex/_search
{
    "query": {
        "query_string": {
           "query": "2016-*",
           "fields": ["name", "season"]
        }
    }
}

Или же:

POST myindex/_search
{
    "query": {
        "query_string": {
           "query": "t-shirt*"
        }
    }
}

Эти запросы не возвращают никаких документов (но они должны возвращать проиндексированный документ), и я не знаю, как это исправить.

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

Автор: maxv15 Источник Размещён: 26.10.2019 11:51

Ответы (3)


0 плюса

nameПоле было проанализировано с помощью стандартного анализатора и получают два маркера, то есть tи shirtкак вы можете видеть в следующем _analyzeзапросе

curl -XGET localhost:9200/test/_analyze?pretty -d 't-shirt'
{
  "tokens" : [ {
    "token" : "t",
    "start_offset" : 0,
    "end_offset" : 1,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "shirt",
    "start_offset" : 2,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 1
  } ]
}

Вместо этого вы можете искать, shirt*и вы получите некоторые результаты

POST myindex/_search
{
    "query": {
        "query_string": {
           "query": "shirt*"
        }
    }
}
Автор: Val Размещён: 21.03.2016 01:05

0 плюса

Попробуйте подстановочный запрос

POST myindex/_search
{
  "query": {
    "wildcard": {
      "season": {
        "value": "2016-*"
      }
    }
  }
}
Автор: Arun Размещён: 22.03.2016 07:11

0 плюса

Решение

Я использовал "analyze_wildcard": true(по умолчанию false) и решил проблему нулевых документов, возвращаемых при поиске с - и * в том же запросе.

Примечание. Существует разное поведение между "fields": ["_all"](или не указанием) и указанием всех полей с их именем (например "fields": ["name", "season"]). В моих самых полных тестах я попробовал это.

Автор: maxv15 Размещён: 23.03.2016 02:17
Вопросы из категории :
32x32