这里是 Ershad。我正在研究 lucene。 现在我可以搜索单词了。但是如果我输入单词的一部分,我将无法获得结果。 你能建议要做什么吗?
对于索引,我使用下面的代码
writer = new IndexWriter(directory, new StandardAnalyzer(), true);
writer.SetUseCompoundFile(true);
doc.Add(Field.UnStored("text", parseHtml(html)));
doc.Add(Field.Keyword("path", relativePath));
writer.AddDocument(doc);
为了搜索,我使用下面的代码。
Query query = QueryParser.Parse(this.Query,"text",new StandardAnalyzer());
// create the result DataTable
this.Results.Columns.Add("title", typeof(string));
this.Results.Columns.Add("sample", typeof(string));
this.Results.Columns.Add("path", typeof(string));
// search
Hits hits = searcher.Search(query);
this.total = hits.Length();
最佳答案
如果你引用the Lucene Query Parser Syntax documentation ,您会发现可以在查询末尾附加一个星号 (*
) 以匹配所有以特定字符串开头的词。例如,假设您想要获得同时提及“毛毛虫”和“双体船”的结果。您的搜索查询将是“cat*”。
但是,如果您不能直接控制搜索查询(例如,如果用户正在输入他们自己的搜索查询),那么您可能需要对 QueryParser
。我的经验仅适用于 Java 版本的 Lucene。希望原理与 Lucene.NET 相同。
在 Java 中,您可以扩展 QueryParser
类并覆盖其 newTermQuery(Term)
方法。传统上,此方法会返回一个 TermQuery
对象。但是,子类会返回 PrefixQuery
。例如:
public class PrefixedTermsQueryParser extends QueryParser {
// Some constructors...
protected Query newTermQuery(Term term) {
return new PrefixQuery(term);
}
}
我不太确定您可以在 Lucene.NET 中重写哪些方法,但我确信一定有类似的方法。看着its documentation , 出现 the QueryParser class有一个名为 GetFieldQuery
的方法。也许这是您必须覆盖的方法。
关于c# - 如何使用lucene搜索单词的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968297/