Rails Searchkick не возвращает результаты, когда я использую оператор where

#ruby-on-rails #elasticsearch #searchkick

Вопрос:

Я бегу

 Post.search("daniel")
 

Я получаю более 60 результатов

 Post.where(archive: true) 
 

Я получаю более 60 результатов

 Post.search("daniel", where: { archive: true } 

Here is the full searchkick query.

 

Я получаю 0 результатов

 {
  "query": {
    "bool": {
      "must": {
        "bool": {
          "should": [
            {
              "dis_max": {
                "queries": [
                  {
                    "multi_match": {
                      "query": "daniel",
                      "boost": 10,
                      "operator": "and",
                      "analyzer": "searchkick_search",
                      "fields": [
                        "*.analyzed"
                      ],
                      "type": "best_fields"
                    }
                  },
                  {
                    "multi_match": {
                      "query": "daniel",
                      "boost": 10,
                      "operator": "and",
                      "analyzer": "searchkick_search2",
                      "fields": [
                        "*.analyzed"
                      ],
                      "type": "best_fields"
                    }
                  },
                  {
                    "multi_match": {
                      "query": "daniel",
                      "boost": 1,
                      "operator": "and",
                      "analyzer": "searchkick_search",
                      "fuzziness": 1,
                      "prefix_length": 0,
                      "max_expansions": 3,
                      "fuzzy_transpositions": true,
                      "fields": [
                        "*.analyzed"
                      ],
                      "type": "best_fields"
                    }
                  },
                  {
                    "multi_match": {
                      "query": "daniel",
                      "boost": 1,
                      "operator": "and",
                      "analyzer": "searchkick_search2",
                      "fuzziness": 1,
                      "prefix_length": 0,
                      "max_expansions": 3,
                      "fuzzy_transpositions": true,
                      "fields": [
                        "*.analyzed"
                      ],
                      "type": "best_fields"
                    }
                  }
                ]
              }
            }
          ]
        }
      },
      "filter": [
        {
          "term": {
            "archive": {
              "value": true
            }
...
 

Я посмотрел на документ searchkick gem и точно следую тому, что они перечислили для выполнения. Обычный поиск работает нормально, и он возвращает только 0 сообщений, когда я добавляю предложение where.

Без предложения where он показывает все записи, в которых есть «даниэль», и он прерывается при добавлении предложения where.

Что я здесь делаю не так? Требуется ли дополнительная информация?

 require 'elasticsearch/model'
class Post < ApplicationRecord
  searchkick text_start: [:title]
 

Комментарии:

1. В нижней части результатов показано "filter": [ { "term": { "archive": { "value": false } , что поиск был archive: false неверным. Это неправильный журнал или это подсказка?

2. И это может быть глупый вопрос, но как вы уверены, что должны быть результаты для Daniel И архивировать: верно. Просто потому, что каждый из них возвращает результаты отдельно, не обязательно означает, что мы ожидаем результатов при использовании обоих.

3. Сообщение.где(«название МНЕ НРАВИТСЯ ? и архив = ложь», «%#{параграфы[:термины]}%») работает нормально, но поиск по-прежнему не работает.

4. Можете ли вы добавить свои настройки searchkick в Post модель

5. добавлено внизу.