簡體   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