【发布时间】:2016-09-08 17:20:25
【问题描述】:
我需要自定义实体字段之一,使其类似于 sql 喜欢的搜索。
【问题讨论】:
标签: hibernate lucene hibernate-search
我需要自定义实体字段之一,使其类似于 sql 喜欢的搜索。
【问题讨论】:
标签: hibernate lucene hibernate-search
当您考虑到可以影响索引的形状以及向其抛出的查询类型时,您可以准确地控制匹配规则。
您的问题的一个简单解决方案是使用
@Field(analyze=Analyze.NO)
禁用字段分析。这将“按原样”获取字符串,无需任何处理,并将其作为特殊关键字进行索引。 这意味着它不会被标记化(例如它不会被空格分割)也不会被其他处理(例如不是全部小写)。
在查询时,您必须注意不要处理您正在寻找的关键字。这通常通过org.apache.lucene.index.Term 完成。
最后,如果您正在寻找完全匹配,您可以创建一个org.apache.lucene.search.TermQuery,或者创建一个org.apache.lucene.search.PrefixQuery,它以Term 作为参数,并将匹配所有以匹配您的术语开始(前缀)的索引字段,所以这就像“LIKE 'word%'”。
如果您创建自定义分析器而不是禁用分析器,您将获得更大的灵活性。例如,如果您需要“不区分大小写的 Like”,您可以定义一个不会拆分输入但将其小写的分析器,依此类推..
【讨论】: