c# - 如何使用lucene搜索单词的一部分?

标签 c# .net lucene

这里是 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/

相关文章:

javascript - 我的 signalR 客户端缺少哪些基本组件?

.net - 如何向 VS 2015 vNext .NET 4.x 目标项目添加程序集引用

c# - 与 2 UserProfileValueCollection 进行比较的更快方法

java - Elasticsearch查询不会间歇性地获取结果

Java lucene 标准分析器的默认分隔符?

c# - 名称 'Model' 在 Razor 的当前上下文中不存在

c# - 获取列表中某一列上有不同的所有行

json - 如何在Elasticsearch中过滤内部对象?

c# - Linq to SQL 数据上下文 : how to load data?

c# - 是否有类似于 GNU readline 的 .Net 库?