Получите слово в Lucene - PullRequest
       20

Получите слово в Lucene

1 голос
/ 21 ноября 2010

В Lucene я использую SnowballAnalyzer для индексации и поиска.

Когда я строю индекс, я делаю запросы к своему индексу.Например, я делаю запрос «специализированный» для поля «тело».IndexSearcher возвращает документы, содержащие «специализированные, специализированные и т. Д.»из-за стебля, сделанного SnowballAnalyzer.

Теперь, имея лучшие документы, я хочу получить текстовый фрагмент из поля тела.Этот фрагмент должен содержать основанную на словах версию слова запроса.
Например, один из возвращенных документов имеет поле body: «К сожалению, в некоторых штатах слепые люди имеют доступ только к общим реабилитационным агентствам, которые обслуживают людей с различнымиинвалидности. В этих случаях специализированные услуги для людей с нарушениями зрения не всегда доступны ».Затем я хотел бы получить часть «В этих случаях специализированные услуги для визуально» в качестве фрагмента.Кроме того, я хочу получить термины из этого фрагмента.Код, который будет это делать, но с одним знаком «?»персонаж, где у меня есть вопрос:

Как я хочу это сделать IndexReader ir = IndexReader.open(fsDir);<br> TermPositionVector tv = (TermPositionVector)ir.getTermFreqVector(hits.scoreDocs[i].doc, "body");

?- здесь: запрос - запрос должен быть термином.Таким образом, если реальный запрос был «специализированным», то запрос должен быть специализированным, как обычно делает анализатор снежного кома.Как получить анализируемый анализатором термин для отдельного слова или фразы, поскольку запрос может содержать фразу: «специализированные машины».

int idx = tv.indexOf(query);<br> int [] idxs = tv.getTermPositions(idx);<br> for(String t : tv.getTerms()){<br> int iidx = tv.indexOf(t);<br> int [] iidxs = tv.getTermPositions(iidx);<br> for(int ni : idxs){<br> tmpValue = 0.0f;<br> for(int nni : iidxs){<br> if(Math.abs(nni-ni)<= Settings.termWindowSize){

edit
Я нашел способ получить основанный термин:
Query q = queryParser.parse("some text to be parsed"); String parsedQuery = q.toString();
Существует метод для объекта Query toString (String fieldName) ;

1 Ответ

0 голосов
/ 21 ноября 2010

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

Решением Lucene для получения фрагментов кода является Highlighter .Другой вариант - FastVectorHighlighter .Я полагаю, что вы можете настроить оба термина так, чтобы они соответствовали полному, а не полному.

...