Заполнитель предложений с дополнительными условиями в Elastic Search - PullRequest
0 голосов
/ 22 октября 2018

У меня есть индекс, который возвращает задания на разных языках.

Мне нужно искать похожие работы по одному тексту на одном языке.Итак, допустим, я установил 1 как LanguageId для английского языка.И я хочу искать вакансии, соответствующие учетной записи.Поэтому, если я напишу запрос ниже, он получит задания на разных языках.Таким образом, запрос "must" не оказывает никакого влияния.

GET jobs/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "languageid": "1"
          }
        }
      ]
    }
  },
  "suggest": {
    "suggestions": {
      "text": "acce",
      "completion": {
        "field": "jobs.suggest",
        "size": 30
      }
    }
  }
}

Мое отображение выглядит следующим образом

   "mappings": {
"jobs": {
        "properties": {
          "@timestamp": {
            "type": "date"
          },
          "@version": {
            "type": "text"
          },
          "industytype": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "jobs": {
            "properties": {
              "suggest": {
                "type": "completion",
                "analyzer": "simple",
                "preserve_separators": true,
                "preserve_position_increments": true,
                "max_input_length": 50
              }
            }
          },
          "language": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "type": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "updateddate": {
            "type": "date"
          }
        }
      }
    }
}

1 Ответ

0 голосов
/ 25 октября 2018

Нет способа отфильтровать предложения во время запроса, потому что completion подсказка использует FST - специальная структура данных в памяти, построенная во время индекса:

Подсказки в Lucene создаются в памяти путем загрузки значений завершения из индекса, а затем построения FST.Это может быть медленный, ресурсоемкий процесс.И, как только индекс изменится, FST необходимо перестроить.«Поиск в реальном времени» - это мантра Elasticsearch.Недопустимо возвращать устаревшие предложения или требовать полной перестройки при изменении индекса. Вместо того, чтобы строить FST во время поиска, мы теперь строим FST для сегмента во время индекса.

Поэтому все, что вы можете сделать, это добавить context для вашего предложения.Контекст также заполняется во время индекса вместе с полем completion и поэтому может использоваться во время запроса в запросе suggest.Кроме того, эта статья может быть полезна для вас.

...