簡體   English   中英

Lucene.NET搜索索引方法

[英]Lucene.NET search index approach

我試圖在我們的一個網站上整理一個使用Lucene.NET的測試用例。 我想做以下事情:

索引一個唯一的ID。 跨逗號分隔的術語或標簽字符串的索引。

例如。

第1項:Id = 1標簽=某些東西,分項

然后,我將構建搜索結構,以便可以根據標簽查找文檔,即

標簽:某物或標簽:分隔項

我需要維護確切的術語值以便對其進行搜索。

我正在運行某些程序,並且正在按預期方式解析搜索查詢,但是沒有看到任何結果。 這是一些代碼。

我的解析器(_luceneAnalyzer被傳遞到我的索引服務中):

var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_CURRENT, "Tags", _luceneAnalyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
return parser;

我的Lucene.NET文檔創建:

var doc = new Document();

var id = new Field(
    "Id",
    NumericUtils.IntToPrefixCoded(indexObject.id),
    Field.Store.YES,
    Field.Index.NOT_ANALYZED,
    Field.TermVector.NO);

var tags = new Field(
    "Tags",
    string.Join(",", indexObject.Tags.ToArray()),
    Field.Store.NO,
    Field.Index.ANALYZED,
    Field.TermVector.YES);

doc.Add(id);
doc.Add(tags);

return doc;

我的搜索:

var parser = BuildQueryParser();
var query = parser.Parse(searchQuery);
var searcher = Searcher;

TopDocs hits = searcher.Search(query, null, max);
IList<SearchResult> result = new List<SearchResult>();
float scoreNorm = 1.0f / hits.GetMaxScore();

for (int i = 0; i < hits.scoreDocs.Length; i++)
{
    float score = hits.scoreDocs[i].score * scoreNorm;
    result.Add(CreateSearchResult(searcher.Doc(hits.scoreDocs[i].doc), score));
}

return result;

我的索引中有兩個文檔,一個帶有標簽“ Something”,另一個帶有標簽“ Something”和“ Separated-Term”。 重要的是-保留條款,因為我希望完全匹配全部價值。

當我使用“ tags:Something”搜索時,沒有得到任何結果。

我應該使用什么分析器來獲得我想要的搜索索引? 是否有任何指針可以將這樣的搜索組合在一起? 為什么我當前的搜索未返回任何結果?

非常感謝

需要考慮的一些想法:

  1. 嘗試搜索“ Tags:Something”(您在示例中將字段名稱“ Tags”小寫了)
  2. 我認為您需要一個按字段分析器:一個用於“ Id”,一個用於“ Tags”
  3. Luke是檢查索引和查詢的一個非常好的工具(對於Lucene.net創建的數據很好用)

希望這可以幫助,

看來您可以將多個具有相同名稱的字段添加到文檔中,所以我將代碼更改為:

foreach (string tag in vehicle.Tags)
{
    var tags = new Field(
        TAGS,
        tag,
        Field.Store.YES,
        Field.Index.ANALYZED,
        Field.TermVector.YES);

    doc.Add(tags);
}

現在,我可以在“標簽”字段中按單個或多個標簽進行搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM