Почему я получаю 0 результатов

Я построил функцию автозаполнения для небольшого приложения поиска, используя опоясывающий лишай elasticsearch. Когда я тестирую анализатор и токены, кажется, что все настроено правильно.

    PUT /autocomplete
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    },
    "analysis": {
      "filter": {
        "autocomplete_shingles_filter": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 5,
          "output_unigrams": false
        }
      },
      "analyzer": {
        "autocomplete_shingles_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
          "lowercase",
          "autocomplete_shingles_filter"
          ]
        }
      }
    }
  }
}

GET /autocomplete/_analyze?analyzer=autocomplete_shingles_analyzer&text=2010 toyota camry

Но затем, когда я иду, чтобы фактически создать индекс и сопоставление и использовать запрос соответствия с полем _all, я получаю 0 результатов

"mappings": {
"suggestions": {
  "_all": {
    "enabled": true,
    "index_analyzer": "autocomplete_analyzer",
    "search_analyzer": "autocomplete_analyzer"
  },
  "properties": {
    "makes": {
      "type": "string",
      "include_in_all": true
      },
      "models": {
        "type": "string",
        "include_in_all": true
      },
      "years": {
        "type": "string",
        "include_in_all": true
        }
      }
    }
  }
}

Вот пример данных

    PUT /autocomplete/suggestions/_bulk
{"index": {"_id":"1"}}
{"years": ["2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017"]}
{"index": {"_id":"2"}}
{"makes": "Acura", "models": ["Legend Integra NSX Vigor TL RL SLX CL MDX RSX TSX RDX ZDX"]}
{"index": {"_id":"3"}}
{"makes": "Alfa Romeo", "models": ["164 Spider"]}
{"index": {"_id":"4"}}
{"makes": "Aston Martin", "models": ["DB9 Vanquish S DB9 Volante V8 Vantage Vantage DBS Rapide V8 Vantage S V12 Vantage Virage"]}
{"index": {"_id":"5"}}
{"makes": "Alfa Romeo", "models": ["164 Spider"]}

Почему это будет работать, когда я использую API validate analyzer, но когда я фактически создаю индекс, сопоставление и запрос… Я получаю 0 результатов? Что я делаю не так?

ОБНОВЛЕНИЕ

   {
  "query": {
    "match": {
      "_all": {
        "query": "2010 acura integra",
        "operator": "and"
      }
    }
  }
}

UPDATE 2 я думаю, что я понял это, я использовал operator: and — что означало, что все термины должны быть во всех областях, которые не будут работать. Удалите оператора, и я получу результаты. Тем не менее, в моем тестировании кажется, что запрос с несколькими совпадениями может быть лучше подходит для этого, потому что 1)я могу увеличить поля 2) мне не нужно использовать поле _all 3)кажется, что у него есть лучшие варианты настройки запроса, чтобы настроить его с течением времени, я на правильном пути?

1 ответ