Bor*_*ens 5 lucene.net startswith
string q = "m";
Query query = new QueryParser("company", new StandardAnalyzer()).Parse(q+"*");
Run Code Online (Sandbox Code Playgroud)
将导致查询成为prefixQuery:company:a*
我仍然会得到像"舰队非洲"这样的结果,很明显A不是一开始就给我带来了不良后果.
Query query = new TermQuery(new Term("company", q+"*"));
Run Code Online (Sandbox Code Playgroud)
将导致查询成为termQuery:company:a*并且不返回任何结果.可能是因为它将查询解释为完全匹配,并且我的值都不是"a*"字面值.
Query query = new WildcardQuery(new Term("company", q+"*"));
Run Code Online (Sandbox Code Playgroud)
将返回与prefixquery相同的结果;
我究竟做错了什么?
StandardAnalyzer将"舰队非洲"标记为"舰队"和"非洲".您的*搜索将与后期匹配.
如果您想将"Fleet Africa"视为单个术语,请使用不会在空格上分解字符串的分析器.KeywordAnalyzer是一个示例,但您可能仍希望小写数据,以便查询不区分大小写.