Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Lucene Indexed Stored Tokenized / 11 сообщений из 11, страница 1 из 1
19.09.2017, 11:57
    #39523189
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Пытаюсь начать изучать Lucene.

не понимаю значения аттрибутов полей.

Indexed - пишут, что позволяет искать по полю с таким атрибутом

Stored - пишут, что позволяет находить поле как оно есть

Tokenized - каким-то образом значение поля бьётся на токены. Токены попадают в индекс.


Честно говоря ни черта не понятно. Что будет если по полю искать можно(Indexed) а находить(Stored) нельзя?

Что за токены? зачем?
...
Рейтинг: 0 / 0
19.09.2017, 12:42
    #39523234
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
токены (как вы выражаетесь) - элементы поля, на которые его можно разбить, чтобы индексировать по ним отдельно. То есть например, поле с текстом можно разбить на слова.
indexed - означает, что поле будет индексироваться для поиска. Не индексируемыми можно объявить поля, по которым не нужен поиск.
stored (хранимое) - означает, что индекс будет храниться на диске. Если поле надо игнорировать, то для него атрибуты indexed и stored можно установить в false. Но поле может быть индексируемым и не хранимым, если индекс создавать динамически для временных данных.

Вместо простого Lucene возможно лучше сразу изучать Solr или ElacticSearch, они внутри себя используют Lucene, но имеют расширенные возможности - например, возможность создания кластера и асинхронное выполнение индексации.
...
Рейтинг: 0 / 0
19.09.2017, 13:02
    #39523245
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Partisan M,

Partisan MВместо простого Lucene возможно лучше сразу изучать Solr или ElacticSearch, они внутри себя используют Lucene, но имеют расширенные возможности - например, возможность создания кластера и асинхронное выполнение индексации.

у меня hibernate-search

Просто в нём тяжело разобраться без основ по Lucene
...
Рейтинг: 0 / 0
19.09.2017, 18:42
    #39523460
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Partisan M,

а зачем нужно поле в памяти по которому искать нельзя
либо зачем индексируемое поле, которое в памяти не хранится?

Как-то пока непонятно. Зачем может быть надо игнорировать поле? что Вы под этим подразумеваете?
...
Рейтинг: 0 / 0
19.09.2017, 21:31
    #39523496
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
questionerа зачем нужно поле в памяти по которому искать нельзя
либо зачем индексируемое поле, которое в памяти не хранится?

Если по полю надо искать, то оно объявляется индексируемым. Если не надо искать, то объявляется неиндексируемым (indexed="false").
Обычно индексы Lucene сохраняются в файлах для будущего использования. Для этого поля объявляются хранимыми (stored) - эти поля сохраняются в файлах индексов. Но бывают ещё индексы, не сохраняемые в файлах, а динамически создаваемые в памяти (in-memory index) для временных данных. Поля для них объявляются нехранимыми (stored="false").
...
Рейтинг: 0 / 0
19.09.2017, 23:02
    #39523527
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Partisan MНо бывают ещё индексы, не сохраняемые в файлах, а динамически создаваемые в памяти (in-memory index) для временных данных. Поля для них объявляются нехранимыми (stored="false").
Кажется stored - это опция хранения документа целиком. Или атрибута. Например
вместе с документом вы храните его ISBN, DateCreation, Size, URL e.t.c.

А само туловище документа. Text. Или Content в силу особенностей (очень дофига мегабайтов)
иногда не кладут в индекс а просто анализируют. Например поисковик проиндексировал
"Войну и Мир" и вы можете искать в нем слова (токены) или словообразующие
атомы (корни слов по алгоритму SnowBall) и вы можете получить ранг документа
в поисковом ответе. Но при этом сам документ вам будет недоступен. Надо будет
дать URL на оригинал чтоб юзер его мог почитать. Нормальная практика ИМХО.
...
Рейтинг: 0 / 0
19.09.2017, 23:09
    #39523529
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
questionerTokenized - каким-то образом значение поля бьётся на токены. Токены попадают в индекс.

Что за токены? зачем?
Токены это грубо говоря поток words, который попадает в индекс. Но в силу особенностей
поисковых движков в них выгодно толкать не оригинальные слова а очищенные. Например..
из слов полностью выкашиваются нахер предлоги, междометия знаки препинания и
спец-символы. Далее в зависимости от токенизатора (щас навскидку не помню точно
или анализатора) вы можете пойти еще дальше и порезать слова на словообразующие
основы. Полученный поток токенов будет очень компактным и селективным но по смыслу
будет соотвествовать документу. Профит - экономия места в индексе. Может быть в несколько раз.
...
Рейтинг: 0 / 0
20.09.2017, 17:08
    #39523870
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Partisan Mquestionerа зачем нужно поле в памяти по которому искать нельзя
либо зачем индексируемое поле, которое в памяти не хранится?

Если по полю надо искать, то оно объявляется индексируемым. Если не надо искать, то объявляется неиндексируемым (indexed="false").
Обычно индексы Lucene сохраняются в файлах для будущего использования. Для этого поля объявляются хранимыми (stored) - эти поля сохраняются в файлах индексов. Но бывают ещё индексы, не сохраняемые в файлах, а динамически создаваемые в памяти (in-memory index) для временных данных. Поля для них объявляются нехранимыми (stored="false").

Приведите пожалуйста примеры когда надо объявлять индекс хранимым, но неиндексируемым, а когда индексируемым, но не хранимым
...
Рейтинг: 0 / 0
20.09.2017, 17:10
    #39523873
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
maytonquestionerTokenized - каким-то образом значение поля бьётся на токены. Токены попадают в индекс.

Что за токены? зачем?
Токены это грубо говоря поток words, который попадает в индекс. Но в силу особенностей
поисковых движков в них выгодно толкать не оригинальные слова а очищенные. Например..
из слов полностью выкашиваются нахер предлоги, междометия знаки препинания и
спец-символы. Далее в зависимости от токенизатора (щас навскидку не помню точно
или анализатора) вы можете пойти еще дальше и порезать слова на словообразующие
основы. Полученный поток токенов будет очень компактным и селективным но по смыслу
будет соотвествовать документу. Профит - экономия места в индексе. Может быть в несколько раз.

Вот попали в индекс допустим слова без междометий и предлогов.

Эти слова на что-то ссылаются? что происходит когда я ищу по ним? Как их использовать?
...
Рейтинг: 0 / 0
20.09.2017, 19:32
    #39524002
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Это по большей части зависит от вас. Смотря что вы хотите искать.
...
Рейтинг: 0 / 0
20.09.2017, 20:44
    #39524029
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lucene Indexed Stored Tokenized
Окей. Я проясню на примере двух кейсов.

Кейс 1. У вас есть текст "Война и Мир" в виде текстового файла. И вам интересно найти
сколько раз там Пьер Безухов встречался с Наташей Ростовой. Текст - небольшой.
Несколько мегабайт. Никакие Lucene здесь не нужны вообще. Берете алгоритм
Кнута-Морриса-Пратта (КМП) и спокойно загружаете весь текст в один String
и ищете там. Потом курите найденные вхождения.

Или просто берете Notepad++ :)...

Кейс 2. Вам нужно из советских газет " Правда " узнать сколько раз Ленин и Троцкий
спорили о пользе революции начиная с 1917 года но при этом не читать газеты где упоминается
Сталин . Вот такая причудливая постановка.

Здесь заранее нам нужны оцифрованные копии газет и некая технология которая
позволит искать в первую очередь наиболее релевантные издания газет. Тоесть
нас будет интересовать тот выпуск где наши искомые слова встретились не 1 раз
а много раз и в совокупности. Это все ради того чтобы поберечь собственное
здоровье. Ведь просматривать вручную несколько тысяч результатов будет
как-то грустно.

Что нам нужно? Нам нужны Ленин и Троцкий как keyword. Учитывая что никто
при оцифровке не занимался построением keywords то придется возложить
эту задачу на анализаторы. При этом нам нужен именно Русский анализатор.
Тоесть тот который делает сведение падежей и склонений. Вместо Троцкого,
Троцкому ... нам нужен хештег который просто характеризует это слово (токен).

Нам нужна методология разделения наших данных на Documents. Пускай это будет 1 номер
газеты. Для простоты. Хотя возможен и другой подход.

Нам нужны также хранимые атрибуты для индексирования. Например title="Правда",
publishDate="YYYY-MM-DD"... e.t.c. И собственно body. Или текст газеты.

Далее мы индексируем наш контент по всем правилам Lucene. Добавляем нужные
атрибуты и ищем следующим поисковым запросом:

Код: java
1.
Ленин AND Троцкий AND революция NOT Сталин title:"Правда" publishDate:["1917-01-01" to "1991-01-01"]



В результате мы получим сет документов отранжированных по совокупности искомых атрибутов.
Газеты "Правда" с Лениным и Троцким будут в топе. А газет со Сталиным не будет.

Полученный индекс можно не удалять а хранить и юзать для других поисков.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Lucene Indexed Stored Tokenized / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]