2015-09-21 3 views
1

Новинка от Lucence
Как получить оценку от поиска?
Это формат поиск
Я видел пример того, как получить результат из [] массива ScoreDocs, но я хочу, чтобы положить его в классе SampleDataLucene Получить оценку от поиска

private static SampleData _mapLuceneDocumentToData(Document doc) 
{ 
    return new SampleData 
    { 
     sID = Convert.ToInt32(doc.Get("sID")), 
     Text = doc.Get("Text") 
     //Name = doc.Get("Name"), 
     //Description = doc.Get("Description") 
    }; 
} 
private static IEnumerable<SampleData> _mapLuceneToDataList(IEnumerable<Document> hits) 
{ 
    return hits.Select(_mapLuceneDocumentToData).ToList(); 
} 
private static IEnumerable<SampleData> _mapLuceneToDataList(IEnumerable<ScoreDoc> hits, IndexSearcher searcher) 
{ 
    return hits.Select(hit => _mapLuceneDocumentToData(searcher.Doc(hit.Doc))).ToList(); 
} 
private static Query parseQuery(string searchQuery, QueryParser parser) 
{ 
    Query query; 
    try 
    { 
     query = parser.Parse(searchQuery.Trim()); 
    } 
    catch (ParseException) 
    { 
     query = parser.Parse(QueryParser.Escape(searchQuery.Trim())); 
    } 
    return query; 
} 
private static IEnumerable<SampleData> _search (string searchQuery, string searchField = "") 
{ 
    // validation 
    if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", ""))) 
     return new List<SampleData>(); 

    // set up lucene searcher 
    using (var searcher = new IndexSearcher(_directory, false)) 
    { 
     var hits_limit = 1000; 
     var analyzer = new StandardAnalyzer(Version.LUCENE_30); 

     // search by single field 
     if (!string.IsNullOrEmpty(searchField)) 
     { 
      var parser = new QueryParser(Version.LUCENE_30, searchField, analyzer); 
      var query = parseQuery(searchQuery, parser); 
      var hits = searcher.Search(query, hits_limit).ScoreDocs; 
      var results = _mapLuceneToDataList(hits, searcher); 
      analyzer.Close(); 
      searcher.Dispose(); 
      return results; return results; 
+0

Слезай голосовать, что это проблема? Это очень четко заявленная проблема, и я опубликовал решение, которое я нашел. Это отличный пример того, как получить результаты поиска в классе. И с моим ответом, как подобрать счет тоже. – Paparazzi

ответ

1

счет в хитах, но не в документе
ответ был

private static SampleData _mapLuceneDocumentScoreToData(Document doc, float score) 
{ 
    SampleData sampleData = new SampleData 
    { 
     sID = Convert.ToInt32(doc.Get("sID")), 
     Text = doc.Get("Text"), 
     Score = score 
    }; 
} 
private static IEnumerable<SampleData> _mapLuceneToDataList(IEnumerable<ScoreDoc> hits, IndexSearcher searcher) 
{ 
    return hits.Select(hit => _mapLuceneDocumentScoreToData(searcher.Doc(hit.Doc), hit.Score)).ToList(); 
} 
Смежные вопросы