|
|
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Пытаюсь начать изучать Lucene. не понимаю значения аттрибутов полей. Indexed - пишут, что позволяет искать по полю с таким атрибутом Stored - пишут, что позволяет находить поле как оно есть Tokenized - каким-то образом значение поля бьётся на токены. Токены попадают в индекс. Честно говоря ни черта не понятно. Что будет если по полю искать можно(Indexed) а находить(Stored) нельзя? Что за токены? зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 11:57 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
токены (как вы выражаетесь) - элементы поля, на которые его можно разбить, чтобы индексировать по ним отдельно. То есть например, поле с текстом можно разбить на слова. indexed - означает, что поле будет индексироваться для поиска. Не индексируемыми можно объявить поля, по которым не нужен поиск. stored (хранимое) - означает, что индекс будет храниться на диске. Если поле надо игнорировать, то для него атрибуты indexed и stored можно установить в false. Но поле может быть индексируемым и не хранимым, если индекс создавать динамически для временных данных. Вместо простого Lucene возможно лучше сразу изучать Solr или ElacticSearch, они внутри себя используют Lucene, но имеют расширенные возможности - например, возможность создания кластера и асинхронное выполнение индексации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 12:42 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Partisan M, Partisan MВместо простого Lucene возможно лучше сразу изучать Solr или ElacticSearch, они внутри себя используют Lucene, но имеют расширенные возможности - например, возможность создания кластера и асинхронное выполнение индексации. у меня hibernate-search Просто в нём тяжело разобраться без основ по Lucene ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 13:02 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Partisan M, а зачем нужно поле в памяти по которому искать нельзя либо зачем индексируемое поле, которое в памяти не хранится? Как-то пока непонятно. Зачем может быть надо игнорировать поле? что Вы под этим подразумеваете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 18:42 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
questionerа зачем нужно поле в памяти по которому искать нельзя либо зачем индексируемое поле, которое в памяти не хранится? Если по полю надо искать, то оно объявляется индексируемым. Если не надо искать, то объявляется неиндексируемым (indexed="false"). Обычно индексы Lucene сохраняются в файлах для будущего использования. Для этого поля объявляются хранимыми (stored) - эти поля сохраняются в файлах индексов. Но бывают ещё индексы, не сохраняемые в файлах, а динамически создаваемые в памяти (in-memory index) для временных данных. Поля для них объявляются нехранимыми (stored="false"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 21:31 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Partisan MНо бывают ещё индексы, не сохраняемые в файлах, а динамически создаваемые в памяти (in-memory index) для временных данных. Поля для них объявляются нехранимыми (stored="false"). Кажется stored - это опция хранения документа целиком. Или атрибута. Например вместе с документом вы храните его ISBN, DateCreation, Size, URL e.t.c. А само туловище документа. Text. Или Content в силу особенностей (очень дофига мегабайтов) иногда не кладут в индекс а просто анализируют. Например поисковик проиндексировал "Войну и Мир" и вы можете искать в нем слова (токены) или словообразующие атомы (корни слов по алгоритму SnowBall) и вы можете получить ранг документа в поисковом ответе. Но при этом сам документ вам будет недоступен. Надо будет дать URL на оригинал чтоб юзер его мог почитать. Нормальная практика ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 23:02 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
questionerTokenized - каким-то образом значение поля бьётся на токены. Токены попадают в индекс. Что за токены? зачем? Токены это грубо говоря поток words, который попадает в индекс. Но в силу особенностей поисковых движков в них выгодно толкать не оригинальные слова а очищенные. Например.. из слов полностью выкашиваются нахер предлоги, междометия знаки препинания и спец-символы. Далее в зависимости от токенизатора (щас навскидку не помню точно или анализатора) вы можете пойти еще дальше и порезать слова на словообразующие основы. Полученный поток токенов будет очень компактным и селективным но по смыслу будет соотвествовать документу. Профит - экономия места в индексе. Может быть в несколько раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 23:09 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Partisan Mquestionerа зачем нужно поле в памяти по которому искать нельзя либо зачем индексируемое поле, которое в памяти не хранится? Если по полю надо искать, то оно объявляется индексируемым. Если не надо искать, то объявляется неиндексируемым (indexed="false"). Обычно индексы Lucene сохраняются в файлах для будущего использования. Для этого поля объявляются хранимыми (stored) - эти поля сохраняются в файлах индексов. Но бывают ещё индексы, не сохраняемые в файлах, а динамически создаваемые в памяти (in-memory index) для временных данных. Поля для них объявляются нехранимыми (stored="false"). Приведите пожалуйста примеры когда надо объявлять индекс хранимым, но неиндексируемым, а когда индексируемым, но не хранимым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 17:08 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
maytonquestionerTokenized - каким-то образом значение поля бьётся на токены. Токены попадают в индекс. Что за токены? зачем? Токены это грубо говоря поток words, который попадает в индекс. Но в силу особенностей поисковых движков в них выгодно толкать не оригинальные слова а очищенные. Например.. из слов полностью выкашиваются нахер предлоги, междометия знаки препинания и спец-символы. Далее в зависимости от токенизатора (щас навскидку не помню точно или анализатора) вы можете пойти еще дальше и порезать слова на словообразующие основы. Полученный поток токенов будет очень компактным и селективным но по смыслу будет соотвествовать документу. Профит - экономия места в индексе. Может быть в несколько раз. Вот попали в индекс допустим слова без междометий и предлогов. Эти слова на что-то ссылаются? что происходит когда я ищу по ним? Как их использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 17:10 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Это по большей части зависит от вас. Смотря что вы хотите искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 19:32 |
|
||
|
Lucene Indexed Stored Tokenized
|
|||
|---|---|---|---|
|
#18+
Окей. Я проясню на примере двух кейсов. Кейс 1. У вас есть текст "Война и Мир" в виде текстового файла. И вам интересно найти сколько раз там Пьер Безухов встречался с Наташей Ростовой. Текст - небольшой. Несколько мегабайт. Никакие Lucene здесь не нужны вообще. Берете алгоритм Кнута-Морриса-Пратта (КМП) и спокойно загружаете весь текст в один String и ищете там. Потом курите найденные вхождения. Или просто берете Notepad++ :)... Кейс 2. Вам нужно из советских газет " Правда " узнать сколько раз Ленин и Троцкий спорили о пользе революции начиная с 1917 года но при этом не читать газеты где упоминается Сталин . Вот такая причудливая постановка. Здесь заранее нам нужны оцифрованные копии газет и некая технология которая позволит искать в первую очередь наиболее релевантные издания газет. Тоесть нас будет интересовать тот выпуск где наши искомые слова встретились не 1 раз а много раз и в совокупности. Это все ради того чтобы поберечь собственное здоровье. Ведь просматривать вручную несколько тысяч результатов будет как-то грустно. Что нам нужно? Нам нужны Ленин и Троцкий как keyword. Учитывая что никто при оцифровке не занимался построением keywords то придется возложить эту задачу на анализаторы. При этом нам нужен именно Русский анализатор. Тоесть тот который делает сведение падежей и склонений. Вместо Троцкого, Троцкому ... нам нужен хештег который просто характеризует это слово (токен). Нам нужна методология разделения наших данных на Documents. Пускай это будет 1 номер газеты. Для простоты. Хотя возможен и другой подход. Нам нужны также хранимые атрибуты для индексирования. Например title="Правда", publishDate="YYYY-MM-DD"... e.t.c. И собственно body. Или текст газеты. Далее мы индексируем наш контент по всем правилам Lucene. Добавляем нужные атрибуты и ищем следующим поисковым запросом: Код: java 1. В результате мы получим сет документов отранжированных по совокупности искомых атрибутов. Газеты "Правда" с Лениным и Троцким будут в топе. А газет со Сталиным не будет. Полученный индекс можно не удалять а хранить и юзать для других поисков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 20:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39524029&tid=2122580]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 415ms |

| 0 / 0 |
