我正在为我的网站搜索服务开发一个建议框。我必须搜索这样的字段:
Visual Basic企业版
Visual C ++
Visual J ++
我的代码是:
Directory dir = Lucene.Net.Store.FSDirectory.GetDirectory("Index", false);
IndexSearcher searcher = new Lucene.Net.Search.IndexSearcher( dir,true);
Term term = new Term("nombreAnalizado", _que);
PrefixQuery query = new PrefixQuery(term);
TopDocs topDocs = searcher.Search(query, 10000);
此代码适用于这种情况:
“Enterprise”将匹配“Visual Basic Enterprise Edition”
但“企业E”与任何东西都不匹配。
我在索引时和用户搜索时删除了空格。
感谢。
答案 0 :(得分:2)
我认为您应该使用QueryParser并让它构建适当的Query对象,而不是像PrefixQuery那样使用特定的东西。
在Java中:
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "nombreAnalizado", new StandardAnalyzer(Version.LUCENE_CURRENT));
Query query = parser.parse(_que);
确保使用的是与索引编码器相同的分析器。