Поиск совета по подходу Elasti c к поисковому индексу, поиск по нему и хранение дополнительных данных, которые будут возвращены при поиске. - PullRequest
0 голосов
/ 11 февраля 2020

Преамбула:

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

Я недавно подобрал Elasti c Поиск проекта, но есть пример использования, в котором я не совсем уверен, подходит ли мой подход к нему разумно

Мне бы очень хотелось использовать скорость поиска Elasti c и индексирования Lucene et c.

Данные, которые я храню в нем, будут обновляться очень редко. и мне нужно иметь возможность выполнять полнотекстовый поиск по всему этому, близости et c. et c.

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

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

У меня уже есть данные, которые мне нужны для этого, но правильно их проиндексировать, чтобы я мог делать то, что мне нужно, - вот где у меня есть несколько проблем и вопросов ...

Мой подход:

Подход, который я попробовал, который на самом деле работает во многих отношениях, заключается в индексации всех слов в отдельном индексе и в документе для каждого слова (что позволяет мне сохранять дополнительная информация, которую я хочу).

Например:

index: files/ (для ясности назовем этот индекс ES-F)

Я индексирую a «file (document / pdf et c.)», и я позволил ES сгенерировать ID,

Затем я посмотрел на это двумя способами:

  1. Я использую идентификатор для создания индексов для слов файлов (чтобы определить, из какого файла они пришли), создания документа для каждого слова и всех его дополнительных данных:

index: word_GENERATE-FILE-ID (для наглядности назову этот индекс ES-W)

Я использую идентификатор как часть данных, хранящихся в документе индекса слов (чтобы определить, из какого файла он пришел):

index: word/ (для ясности назову этот индекс ES-W также) `

document: source: { file_id: GENERATED-FILE-ID, string: 'word', etc ... }

Это позволяет мне выполнять множество различных поисков непосредственно по индексу ES-W или по указанным c индексам слов файлов I нужно, но только если это одно слово.

Что для многих моих сценариев использования отлично работает, я ищу слово, получаю дополнительные данные, отлично!

За исключением случаев, когда мне нужно искать фразы et c. очевидно, это не работает.

(Note: This ES cluster will only be used for this sort of data, files and words and nothing else.)

Мои первые несколько вопросов:

  1. Is этот подход имеет смысл / можете ли вы понять, чего я пытаюсь достичь с его помощью?
  2. Есть ли способ объединить документы в запросе, в данном случае несколько строк, а затем выполнить поиск по результату о том, и все еще вернуть документы, которые получает результат? Почти как создание вида (как в SQL) своего рода (я знаю, это немного обнадеживает)
  3. Можете ли вы порекомендовать другой подход?

Я просто не уверен, как я мог бы получить любые дополнительные данные, если бы я должен был хранить весь текст в самом индексном документе ES-F .

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

Потенциальный подход

У меня есть также подумал о создании индекса ES-F , например, следующего (или даже, возможно, дополнительного индекса для page_words или аналогичного ( ES-P ), если я не могу обработать страницу индекс из поиска ниже):

file/

{
 source:
    {
     pages: [
        {
        content: ["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et risus ac eros bibendum pretium fringilla non nulla. Aliquam eget pulvinar lectus, a accumsan ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla facilisi. Etiam in lobortis purus. Nulla ultricies molestie massa, vitae blandit tellus accumsan vitae. Duis accumsan augue ac porttitor finibus. Pellentesque quis finibus enim, eget volutpat purus."]
            },
        {
        content: ["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et risus ac eros bibendum pretium fringilla non nulla. Aliquam eget pulvinar lectus, a accumsan ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla facilisi. Etiam in lobortis purus. Nulla ultricies molestie massa, vitae blandit tellus accumsan vitae. Duis accumsan augue ac porttitor finibus. Pellentesque quis finibus enim, eget volutpat purus."]
            }
       ]

    }
}

, который позволил бы мне выполнять более сложные поиски по страницам (но, очевидно, не по страницам).

Затем вернитесь из этого поиска, верните, какой номер страницы, и затем, используя его, разработайте способ извлечения правильных слов из ES-W индекса ...

  1. Я мог бы добавить все слова при первой их обработке и дополнительные данные, например, к элементу ArrayList для каждой страницы, определить индекс слов ArrayList для этой страницы и включить его в индекс ES-W документирует дополнительные данные.

  2. Затем, используя страницу извлечения и содержимое индекса ES-F после близости поиск по нему. Я мог бы взять содержимое и сделать что-то похожее на шаг 1, дав мне список индексов для каждого искомого слова:

eg. Search for "Elastic Search"

"Lorem ipsum dolor sit amet elastic search adipiscing elit"

    When processing for **ES-W** we'd get an index of:

- 5 for elastic
- 6 for search

   This index would be stored in **ES-W** along with the additional data.
Затем по номеру страницы и индексу ArrayList (для пояснения) я мог точно определить, какие слова были найдены более сложными поисками, такими как поиск по проксимити.

Еще вопросы :

Ну, не считая вопросов выше, на самом деле есть только один ...

Является ли предложенный мною потенциальный подход хорошим или слишком сложно?

Часть меня чувствует, что в действительности все довольно просто и может работать очень хорошо, но я новичок в Elasti c Поиск, поэтому любой совет всегда приветствуется, даже если вы говорите мне, что я Я совершенно не прав !!!

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

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