2012-02-13 3 views
0

Я хочу создать список тегов для документа Lucene на основе предварительно определенного списка.Определить наличие ключевых слов в документе из списка

Так что, если у нас есть документ с текстом

ищет программиста Java с опытом работы в Lucene

и у нас есть список ключевых слов (около 1000 наименований)

Java , php, lucene, C# [...]

Я хочу определить, что ключевые слова Java и Lucene существуют в документе. Просто выполнение java OR php ИЛИ lucene не будет работать, потому что тогда я не буду знать, какое ключевое слово сгенерировало хит.

Любые предложения о том, как реализовать это в Lucene?

ответ

1

Да, это работает

FullTextSession fts = Search.getFullTextSession(getSessionFactory().getCurrentSession()); 

Query q = fts.getSearchFactory().buildQueryBuilder() 
    .forEntity(Offer.class).get() 
    .keyword() 
    .onField("id") 
    .matching(myId) 
    .createQuery(); 
Object[] dId = (Object[]) fts.createFullTextQuery(q, Offer.class) 
    .setProjection(ProjectionConstants.DOCUMENT_ID) 
    .uniqueResult(); 

if(dId != null){ 

    IndexReader indexReader = fts.getSearchFactory().getIndexReaderAccessor().open(Offer.class); 

    TermFreqVector freq = indexReader.getTermFreqVector((Integer) dId[0], "description"); 

} 

Вы должны помнить, чтобы индексировать поля с TermVector.YES в вашей спящем поиске аннотации для поля.

1

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

Ваша проблема очень похожа на мелирование, так же идеи применимы, вы можете:

  • повторно анализировать сохраненные поля документа Lucene,
  • использование term vectors для быстрого доступа к документам 'сохраненные поля.

Обратите внимание, что если вы хотите использовать термин векторов, то Вам необходимо включить их во время компиляции (см Field.TermVector.YES documentation и Field constructor).

+0

Похоже, что TermVectors может быть здесь. Я использую Hibernate Search, поэтому я посмотрю, могу ли я использовать эту функцию в этом контексте – Marc