我需要自定义一个实体字段,就像sql like search。
答案 0 :(得分:0)
当您认为可以影响索引的形状以及您向其投掷的查询类型时,您可以准确地控制匹配规则。
您问题的简单解决方案是使用
@Field(analyze=Analyze.NO)
禁用对该字段的分析。这将采用String"原样"没有任何处理和索引,它就像一个特殊的关键字。 这意味着它不会被标记化(例如它不会被分割成空格),也不会被处理(例如,不是全部小写)。
在查询时,您必须注意不要处理您正在寻找的关键字。这通常使用org.apache.lucene.index.Term
完成。
最后,如果您要查找完全匹配,可以创建org.apache.lucene.search.TermQuery
,或者org.apache.lucene.search.PrefixQuery
创建一个Term
作为参数,并匹配所有索引字段哪个开头(前缀)匹配你的术语,所以这就像"喜欢'字%' "
如果不是禁用分析器而是创建自定义分析器,则可以获得更大的灵活性。例如,如果你需要一个"不区分大小写的喜欢"您可以定义一个分析器,它不会分割您的输入但会小写它,等等..