Elasticsearch Highlighter — это функция Elasticsearch, поисковой системы с открытым исходным кодом, которая позволяет пользователям быстро и легко искать и анализировать данные. Маркер — это инструмент, который выделяет совпадающие условия поиска в результатах поиска, облегчая пользователям поиск релевантной информации.

Это часть моих статейных рассказов об Elasticsearch и в одной из статей я обещал поделиться своим небольшим опытом реализации одной из фич Elasticsearch в продуктах, которые я сделал. Qadarullah, здесь я просто хочу поделиться историями об Elasticsearch Highlighter в продуктах, которые я сделал.

Elasticsearch Highlighter работает, анализируя содержимое искомых документов и выделяя совпадающие термины в возвращаемых результатах. Он поддерживает различные типы выделения, включая простое выделение, выделение фрагментов и выделение полей. Обычная подсветка выделяет все поле, содержащее совпадающий термин, в то время как выделение фрагментов выделяет только определенные фрагменты поля, содержащие совпадающий термин.

Например, я реализовал подсветку на функцию глобального поиска на сайте Портал Джабарпров. Если вы попытаетесь посетить его, вы увидите, что каждое ключевое слово, которое вы ищете, будет выделено полужирным или сильным стилем для этого ключевого слова. На это влияет подсветка Elasticsearch из результатов поиска.

Для демонстрации я использую DevTools от elasticsearch, вот как мы можем использовать подсветку, чтобы получить эту информацию:

GET ipj-content-staging/_search
{
  "from" : 0,
  "size" : 1,
  "track_scores": true,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "is_active": true
          }
        },
        {
          "multi_match": {
            "query": "jawa barat",
            "fields": 
              [
                "title",
                "content"
              ],
            "fuzziness": "AUTO"
          }
        }
      ]
    }
  },
  "highlight" : {
    "pre_tags": ["<strong>"],
    "post_tags": ["</strong>"],
    "fields" : {
      "content" :  { 
        "fragment_size": 150,
        "number_of_fragments" : 1,
        "type": "plain" 
      }
    }
  }
}

Этот запрос использует запрос соответствия для поиска документов, содержащих слово «jawa barat» в «content» и «название». Параметр выделения используется для выделения совпадающего текста в результатах.

Вот объяснение каждой части поискового запроса:

  1. "from": 0 — этот параметр указывает смещение или номер страницы желаемых результатов поиска. Число 0 означает отсутствие смещения, поэтому поиск начнется с первого результата.
  2. "size": 1 — например, этот параметр указывает желаемое количество результатов поиска. В этом случае запрашивается только один результат.
  3. "track_scores": true — этот параметр указывает Elasticsearch отслеживать оценку поиска для каждого найденного документа.
  4. "query" - В этом разделе указываются критерии поиска. В этом примере критерии поиска строятся с использованием логического запроса с двумя предложениями:

"match": {"is_active": true} — этот пункт ограничивает поиск только документами, у которых значение 'is_active' равно true.

"multi_match" – Это предложение ищет слова «jawa» или «barat» в «названии» или «содержании' столбец документа. Нечеткость установлена ​​​​на «АВТО», что позволяет Elasticsearch регулировать уровень несоответствия путем поиска ближайших совпадающих слов.

5. "highlight" — В этом разделе указывается, как должны отображаться результаты поиска. В этом примере параметр выделения используется для отображения фрагментов текста, соответствующих критериям поиска. Пре-тег <strong> и пост-тег </strong> используются для форматирования соответствующего текста. Столбец, который нужно выделить, упоминается внутри "fields". "fragment_size" указывает количество отображаемых символов в каждом фрагменте, а "number_of_fragments" указывает количество отображаемых фрагментов. "type" установлено значение «обычный», чтобы указать, что выделение необходимо выполнять только для неформатированного текста.

Достаточно для пояснительного запроса, и запрос возвращает документы, похожие на:

{
  "took" : 12,
  "timed_out" : false,
  "_shards" : {..},
  "hits" : {..},
    "max_score" : 9.67622,
    "hits" : [
      {
        "_index" : "ipj-content-staging",
        "_type" : "_doc",
        "_id" : "853e1d90-4fca-48d0-a0b0-825037448b33",
        "_score" : 9.67622,
        "_source" : {...},
        "highlight" : {
          "content" : [
            "Aplikasi layanan mobile berbasis Android yang memberikan kemudahan bagi masyarakat untuk mengakses berbagai informasi dan layanan SAMSAT di <strong>Jawa</strong> <strong>Barat</strong> secara online"
          ]
        }
      }
    ]
  }
}

Вот объяснение каждой части результата примера запроса маркера.

  1. "took": 12 — этот параметр указывает время, необходимое Elasticsearch для обработки поискового запроса в миллисекундах.
  2. "timed_out": false — этот параметр указывает, истекло ли время ожидания запроса поиска до его завершения. В этом случае время поиска не истекло.
  3. "_shards": {...} — этот параметр указывает количество сегментов или разделов, используемых Elasticsearch для поиска в индексе.
  4. "max_score": 9.67622 — этот параметр указывает наивысшую оценку среди всех документов, соответствующих критериям поиска.
  5. "hits": {...} — этот параметр содержит массив результатов поиска. В этом случае возвращается только один результат, поскольку для параметра "size" установлено значение 1.
  6. "_index": "ipj-content-staging" — этот параметр указывает имя индекса, в котором производился поиск.
  7. "_type": "_doc" — этот параметр указывает тип искомого документа.
  8. "_id": "853e1d90-4fca-48d0-a0b0-825037448b33" — этот параметр указывает уникальный идентификатор искомого документа.
  9. "_score": 9.67622 — этот параметр указывает оценку документа, соответствующего критериям поиска.
  10. "_source": {...} — этот параметр содержит фактический документ, соответствующий критериям поиска.
  11. "highlight": {...} — этот параметр содержит выделенные фрагменты текста, соответствующие критериям поиска. В этом случае только столбцы «content» и «title» соответствуют критериям поиска и отображаются с выделенным текстом «Jawa» и «Барат».

Заключение

Elasticsearch Highlighter — это полезная функция, которая помогает пользователям быстро находить релевантную информацию в результатах поиска, выделяя соответствующие условия поиска. Он поддерживает различные типы выделения, что делает его мощным инструментом для поиска и анализа данных в Elasticsearch.

В конце слова я просто хочу сказать: Спасибо, что прочитали мою статью.Надеюсь, это будет полезно.Удачного кодирования!

Ссылка: