2

pubdateという1つのフィールドに基づいて最近の記事を取得したいと思います。私は今のところこのアプローチを持っています:

     private void GetLastIndexId()
        {
            string indexLocation = @"C:\\inetpub\wwwroot\MyWebsite\Data\indexes\newsArticle";
            Directory dir = FSDirectory.GetDirectory(indexLocation);
            IndexReader indexReader = IndexReader.Open(dir);
            IndexSearcher indexSearch = new IndexSearcher(indexReader);
            Analyzer analyzer = new StandardAnalyzer();
            QueryParser qp = new QueryParser("id", analyzer);

            Query query = qp.Parse("pubdate: [2012-01-01T00:00:000-00:00 3012-01-01T00:00:000-00:00]");
            Hits hits = indexSearch.Search(query);
 List<Document> myHits = new List<Document>();
            for (int i = 0; i < hits.Length(); i++)
              {
                 if (i == hits.Length() - 1)
                   {
                     Document doc = hits.Doc(i);
                     lastPubDate = doc.GetValues("pubdate").First();
                   }
              }

        }

編集:私はこれを行い、コンテンツアイテムから長さ1のアイテムを取得しています。フォルダ構造を変更すると失敗する可能性があるため、これは一種のハックです。

4

2 に答える 2

2

ソート引数を受け入れるIndexSearcher.Searchオーバーロードを試しましたか?

var sortField = new SortField("pubdate", SortField.STRING, /*reverse*/ true);
var hits = searcher.Search(query, /*filter*/ null, /*count*/ 1, new Sort(sortField));
于 2012-09-21T11:03:37.207 に答える
0

私はこのようなことをしました:

  var sortField = new SortField("pubdate", SortField.STRING, true);

        for (int i = 0; i < hits.Length(); i++)
        {
            Document doc = hits.Doc(i);
            string getDate = doc.GetValues("pubdate").First();

            if (string.Compare(getDate, lastPubDate) > 0)
            {
                lastPubDate = doc.GetValues("pubdate").First();
            }
        }
于 2012-09-21T13:57:38.277 に答える