@Tiasar
Web Developer

Как правильно искать в elasticsearch с фильтрацией по аттрибутам?

Есть индекс, в нем коллекция с таким маппингом:
{
	"sitcenter": {
		"mappings": {
			"periodical": {
				"properties": {
					"access_index": {
						"type": "integer"
					},
					"category_id": {
						"type": "integer"
					},
					"keywords": {
						"type": "text"
					},
					"keywords_kk": {
						"type": "text"
					},
					"publish_date": {
						"type": "date"
					}
				}
			}
		}
	}
}

Пытаюсь искать слово автобус* при этом надо что бы access_index был равен или меньше 10
Запрос сделал такой:
{
	"size": 50,
	"query": {
		"bool": {
			"should": {
				"wildcard": {
					"keywords": {
						"value": "автобус*",
						"boost": 2
					}
				}
			},
			"filter": {
				"range": {
					"access_index": {
						"lte": 10
					}
				}
			}
		}
	}
}

Находит все что соответствует фильтру access_index <= 10, и не учитывает wildcard, если убираю filter то все ищет корректно. Что не так я делаю? Подскажите.

И еще вопрос, как к фильтру добавить условие что category_id может быть 30, 38, 49 (как в SQL IN)
  • Вопрос задан
  • 485 просмотров
Решения вопроса 1
@Tiasar Автор вопроса
Web Developer
Вот так все работает на elasticsearch версии 6.0.0
{
  "query": { 
    "bool": { 
      "must": {
        "wildcard": {
          "keywords": {
            "value": "автобус*",
            "boost":2
          }
        }
      },
      "filter": [ 
        { "terms":  { "category_id": [33, 35] }}, 
        { "range": { "access_index": { "lte": 30 }}} 
      ]
    }
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы