wildcardquery即通配符查询,即使用通配符来模糊查询,常见的通配符有?,*,-等等,通配符不知道怎么使用的自己google学习下吧。照例还是先阅读官方的api文档:
特别要注意的note后面的话,提醒我们注意,wildcardquery查询是很慢的,因为它需要遍历很多的term,为了避免极慢的查询速度,请不要使用以星号开头的通配符进行查询。
除了官方给的那点提醒以外,我也要提醒大家一点,wildcardquery对于用户输入的查询关键字是大小写敏感的,请不要使用大写形式,因为索引中的term都是小写形式的,这个大家都知道的,特此提醒。
wildcardquery构造函数除了需要一个term对象以外,还有一个参数需要设置maxdeterminizedstates,源码注释里是这样解释的:
/**
* constructs a query for terms matching <code>term</code>.
* @param maxdeterminizedstates maximum number of states in the resulting
* automata. if the automata would need more than this many states
* toocomplexttodeterminizeexception is thrown. higher number require more
* space but can process more complex automata.
*/
public wildcardquery(term term, int maxdeterminizedstates) {
super(term, toautomaton(term), maxdeterminizedstates);
}
其实就是设置根据通配符支持最大能支持有多少term情况,term越多占的硬盘空间越大,但查询也更精确。这个值默认源码里给定的是10000,默认即可。
其他也没什么好说的,wildcardquery使用难度也不大,照样贴一个使用示例吧:
string directorypath = "d:/lucenedir";
string fieldname = "contents";
string querystring = "*recursive*";
query query = new wildcardquery(new term(fieldname,querystring));
示例代码的意图就是查询索引文档中包含recursive这个单词的,ok,打完收工了,此时此刻2015-03-24 22:26,该睡觉了。预计接下来要说说的就是spanquery了。
如果你还有什么问题请加我Q-q:7-3-6-0-3-1-3-0-5,
或者加裙
一起交流学习!
转载:http://iamyida.iteye.com/blog/2195249