Поиск и ранжирование нескольких совпадений фраз в проиндексированных документах Lucene

Учитывая серию документов, содержащих текст, я хотел бы найти фразы, вернуть все совпадения и ранжировать их. Я знаю, как заставить lucene/solr указывать, какие документы совпадают, и выделять их внутри документа, но как получить ранжирование, включающее несколько совпадений из одного и того же документа?

First document.  It has a single line of text.
Second document.  This text line is quite short.
This is another line containing more text and is a bit longer.

Если бы я искал «текстовую строку», я бы хотел найти три совпадения, ранжированные следующим образом:

2nd document -> ...This "text line" is quite short.
1st document -> ...It has a single "line of text".
2nd document -> ...another "line containing more text" and is...

Это возможно? Как?


person Chris Leishman    schedule 17.01.2012    source источник
comment
Первоначально у меня был более сложный вопрос, который включал это, здесь: заголовок stackoverflow.com/questions/8883390/   -  person Chris Leishman    schedule 17.01.2012
comment
Почему вы хотите, чтобы document2 дважды отображался в результатах? Может быть, вам следует индексировать каждую строку как документ...   -  person naresh    schedule 18.01.2012
comment
вот что я сказал, каждая строка как документ, если вы хотите, чтобы совпадения были строками.   -  person milan    schedule 18.01.2012
comment
Я хочу, чтобы документ 2 попал в результаты дважды, потому что у него есть два разных совпадения с разным рейтингом. Но я не могу отделить каждую строку, потому что мои исходные файлы представляют собой поток текста, а поиск фразы должен соответствовать границам новой строки.   -  person Chris Leishman    schedule 22.02.2012


Ответы (1)


Если вы хотите иметь одно совпадение в строке, сделайте каждую строку отдельным документом. Не путайте термин «документ» с тем, является ли текст на самом деле одним файлом.

Если вы хотите сохранить обратную ссылку на файл, просто проиндексируйте идентификатор в другом (сохраненном) поле.

{ id: "myfile.txt",
  text: "first line" }

{ id: "myfile.txt",
  text: "second line" }
person Xodarap    schedule 17.01.2012
comment
Я не говорю о файлах — я говорю о документах lucene. - person Chris Leishman; 22.02.2012
comment
Причина, по которой создание каждой строки в собственном документе не работает, заключается в том, что я действительно хочу иметь возможность искать фразы, которые могут занимать несколько строк. Если каждая строка является отдельным документом Lucene, это невозможно. - person Chris Leishman; 22.02.2012