我想写一个Lucene WildcardQuery,并提到该字段应该以用于搜索的标记开头和结尾。如果我在我的Wildcard查询中使用^box$
作为模式,则无法工作。
答案 0 :(得分:1)
一种可能性是,如果这是典型情况,并且您不打算将此字段作为全文查询,则将其存储为StringField
,并使用简单的TermQuery
进行查询。这使您查询的查询很简单。如果这符合您的需求,那么它是理想的,因为您只需设计索引以最好地满足您的需求。
如果您确实需要在其他地方对该字段进行全文搜索,我建议您可以在字段的开头(也可能是结尾)放置一个唯一的已知术语。然后使用PhraseQuery就可以实现这一点。当然,在运行全文搜索的同一个字段上运行这种查询方式对我来说似乎是一个非常奇怪的用例。
另一种可能性是使用SpanQueries,特别是SpanFirstQuery
,如:
SpanFirstQuery query = new SpanFirstQuery(new SpanTermQuery(new Term(field, "box")), 1);
答案 1 :(得分:0)
扩展femtoRgon的回答:Stupid Lucene Tricks: Exact Match, Starts With, Ends With。