繁体   English   中英

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

[英]How to do search of part of a word using 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();

如果您参考Lucene查询解析器语法文档 ,则会发现您可以在查询末尾附加星号( * ),以匹配所有以特定字符串开头的单词。 例如,假设您想获得同时提及“毛毛虫”和“双体船”的结果。 您的搜索查询将是“ cat *”。

但是,如果您不能直接控制搜索查询(例如,如果用户正在输入自己的搜索查询),则QueryParser可能需要一些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中重写哪些方法,但是我肯定必须有类似的方法。 查看其文档 ,似乎QueryParser类具有一个称为GetFieldQuery的方法。 也许这是您必须重写的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM