2010-03-30 190 views
1

我想在我們的某個網站上使用Lucene.NET的測試用例。我想要做以下事情:Lucene.NET搜索索引方法

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

例如。

項目1: ID = 1個 標籤=東西,分居,期限

然後我將構建搜索這樣我就可以找對標籤的文件即

標籤:東西,或標籤:獨立-term

我需要維護確切的期限值才能進行搜索。

我有一些正在運行的東西,搜索查詢正在按預期進行解析,但我沒有看到任何結果。這裏有一些代碼。

我解析器(_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」搜索時,我沒有得到任何結果。

問題

分析什麼我應該使用,以實現搜索索引我之後? 有什麼指針可以將搜索結果放在一起嗎? 爲什麼我當前的搜索沒有返回任何結果?

非常感謝

回答

0

看樣子你可以用相同的名字命名的文檔添加多個字段,所以我改變了我的代碼:

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

    doc.Add(tags); 
} 

我現在可以搜索通過「標籤」字段中的單個或多個標籤。

0

有一些想法,想一想:

  1. 嘗試搜索「標籤的東西」(你有小寫的字段名稱上你的榜樣「標籤」)
  2. 我想你需要一個每場分析儀:一個用於「Id」,另一個用於「標籤
  3. Luke是檢查索引和查詢的非常好的工具(對於Lucene來說它工作得很好。網創建的數據)

希望這有助於

+0

謝謝@Moleski - 在發佈問題後發現了標籤案例問題,但沒有喜悅。你能澄清你的意思嗎?也會看盧克,認爲這只是Java版本。再次感謝! – 2010-03-31 10:25:00