Я использую ElasticSearch в 1 из моих Ruby on Rails проект. Для ElasticSearch, я сильно используя query_stringElasticsearch query_string многозначные поля
Ниже приведены мои настройки проекта:
рубин 2.2.4, Rails-4.2.0, ElasticSearch-Model-0.1.8
I Вы уже проиндексировали данные. Использование Article.import
Теперь в консоли, я выборка для все опубликованного подсчета статьи, я использую:
Article.search(query: { query_string: { query: {"status:1"} } })
Это прекрасно работает! Теперь я хотел бы найти статьи user_ids
SQL for above работает как шарм!
SELECT * FROM articles WHERE articles.user_id IN (5, 10)
Но, когда я пытаюсь использовать ту же концепцию для query_string, он не работает !!
Article.search(query: { query_string: { query: "status:1 AND user_id:[5, 10]" } })
Это дает мне результат:
Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":"SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[mUk_rhx-RP6G5sJRMpfDwg][articles][0]: SearchParseException[[articles][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"status:1 AND user_id:[5,10]\"}}}]]]; nested: QueryParsingException[[articles] Failed to parse query [status:1 AND user_id:[5,10]]]; nested: ParseException[Cannot parse 'status:1 AND user_id:[5,10]': Encountered \" \"]\" \"] \"\" at line 1, column 98.\nWas expecting one of:\n \"TO\" ...\n <RANGE_QUOTED> ...\n <RANGE_GOOP> ...\n ];
Пожалуйста, помогите мне понять, что именно мне нужно сделать, чтобы сделать эту работу! Я гугл много на этом нашло несколько вариантов, как ассортимент, и т.д., но это не один :(
Надежды услышать от вас скоро!
Спасибо за быстрый ответ @richa я чувствую, есть ограничение в использовании 'терминов query', потому что я готовлю некоторые динамический запрос с использованием' query_string' Так, например:. прямо сейчас, Я строю запрос на основе 'status и user_id', и я ожидаю, что к этому запросу будут добавлены дополнительные атрибуты_ строка, поскольку поиск становится уже. Я новичок в elasticsearch, так что, можно ли использовать как query_string, так и термины в один единственный запрос? –
Обновлен мой ответ. использовали запрос 'term' для статуса вместо' query_string' – Richa
Спасибо @richa, ваш ответ сработал для меня! Только для моей информации я использовал множество сложных запросов, используя 'query_string'. Я использовал почти все, что' query_string' обеспечивает, например. 'LIKE, GTE, LTE', но' [] 'еще не поддерживается' query_string'? –