Результаты поиска Elastic не искали пробел между словами - PullRequest
0 голосов
/ 22 февраля 2019

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

SEARCH_FIELDS = %w"name email"
attribute :text, type: String, default: ''

response = MyModelName.search([query, filter, sort].compact.reduce(:merge)).page(page).per(per_page)
  def query
    query = {}.tap do |q|
      q[:query_string] = {query: text, default_operator: 'AND', fields: SEARCH_FIELDS, allow_leading_wildcard: true}
    end
    return {query: query}
  end

  def filter
    filters = []
    filters << {term: {user_id: user_id}}
    filters << {term: {hide: (hide.nil? ? false : hide)}}
    return {filter: {and: filters}}
  end

Если я ищу первые инициалы имени вроде ('John'), которое работает нормально, но имя с пробелом ('John doe') не найдено.

1 Ответ

0 голосов
/ 22 февраля 2019

убедитесь, что вы строите правильный синтаксис для вашего запроса, если вы хотите точное соответствие в ES, вы должны установить запрос между qoutes

search_field: "daniel acevedo"

   {          
      "size": 10,
      "query": {
        "query_string": {
          "query": "search_field:\"daniel acevedo\""

        }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...