Pre*_*hev 3 java lucene hibernate hibernate-search hashtag
想象一下,我正在建立一个标签搜索.我的主索引类型称为Post,它有一个Hashtag项列表,标记为IndexedEmbedded.另外,每个帖子都有一个Comment对象列表,每个对象都包含一个Hashtag对象列表.
在搜索方面,我使用MultiFieldQueryParser,我传递了一长串可能的搜索字段,包括一些嵌套字段,如:
hashTags.value 和
coments.hashTags.value
现在,有趣的事情发生在我想搜索某些东西时,比如#architecture.我找出了主题标签的位置,所以最简单的逻辑做法是将#architecture类型的查询转换为类型之一hashTags.value:architecture or comments.hashTags.value:architecture尽管可能,这是非常不灵活的.如果我想出另一个包含主题标签的字段怎么办?我也必须把它包括在内.
有没有一般的方法来做到这一点?
PS请记住,我正在搜索的根类型是Post,因为这是我想要实现的结果
Hashtags是关键字,您应该让Lucene处理文本分析以从主文本中提取主题标签并将其存储在自定义字段中.
通过定义要在两个不同的@Field索引的文本(使用@Fields注释),您可以使用Hibernate Search轻松完成此操作.你可以有一个名为comments的字段和另一个commentsHashtags.
然后,您将自定义分析器应用于commentsHashtags,它执行一些标准的标记化并丢弃任何不以#开头的术语; 您可以通过使用标准标记器并应用自定义过滤器轻松定义一个.
当您运行查询时,您不必编写自定义代码来查找查询输入中的哈希标记,让它由相同的分析器处理(无论如何都是默认值)并定位两个字段,您甚至可以增加主题标签更多,如果这是有道理的.
有了这个解决方案你
它为您带来另一个强大的胜利点:然后您可以打开原始IndexReader并从commentsHashtags加载termvector,以获取所有已使用标记的列表以及有关它们的指标.很酷的做一些数据挖掘,或只是可视化标签云.