[英]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.