2015-08-23 58 views

回答

3

这取决于你想要做什么。

  1. 如果2个不同的值之间的区别是名称(“用户1”和“用户2”)经过短短数,你可以使用滴不信,所以用户“user1”的LowerCaseTokenizerFactory,“用户2”和'user4'将被索引为'user'。你可以使用EdgeNGramFilterFactory来创建字段中的n-gram来编制索引,所以'user4'将被编入索引:'u','us','use','user','user4'。在这种情况下,当关键字是'u','我们','使用'或'用户'时,您会发现'user',user1','user2'和'user4'。

  2. 正如@rs提到的,你可以使用通配符查询。

+0

非常感谢。但是什么方式有最好的表现?使用EdgeNGramFilterFactory或使用通配符查询: -/ –

+0

不客气:)我没有比较他们的表现。 EdgeNGramFilterFactory在索引时需要更多时间并需要更多内存。虽然通配符在获取数据时需要更多时间,并且不会在匹配条件中应用分析器。如果您决定使用通配符,如果您有大量数据,请不要在关键字(如“* user”)的开头放置“*”或“?”。 –

0

如果你想在查询时来解决这个问题,你可以创建一个“通配符”查询对象和搜索“用户*”得到的所有结果。举个例子:

Query q = yourQueryBuilderInstance.keyword().wildcard().onField("yourField") 
     .matching("user*").createQuery();