0

Sitecoreコンテンツアイテム内のいくつかの記事を検索して値を与える機能があります。これまでにインデックスを作成し、IndexViewerに表示しています。ただし、関数の戻り値は0です。詳細については、次のリンクを検索しました:http ://sitecoregadgets.blogspot.com/2009/11/working-with-lucene-search-index-in_25.html 。

 protected IEnumerable<Item> ShowHomePageNews(int numOfArticles, string stringofCountries)
    {
        List<Item> items = new List<Item>();
        Sitecore.Search.Index indx = SearchManager.GetIndex("newsArticles");
        using (IndexSearchContext searchContext = indx.CreateSearchContext())
        {
            var db = Sitecore.Context.Database;
            CombinedQuery query = new CombinedQuery();
            QueryBase catQuery = new FieldQuery("countries", stringofCountries); //FieldName, FieldValue.
            SearchHits results = searchContext.Search(catQuery); //Searching the content items by fields.
            SearchResultCollection result = results.FetchResults(0, numOfArticles);
            foreach (SearchResult i in result)
            {
                items = result
                              .Where(r => !r.Title.StartsWith("*"))
                              .Select(r => db.GetItem(new Sitecore.Data.ItemUri(r.Url).ToDataUri()))
                              .ToList();
                //Lucene.Net.Documents.Field url = i.Document.GetField("_url");
                //Sitecore.Data.ItemUri itemUri = new Sitecore.Data.ItemUri(url.StringValue());
                //Sitecore.Data.Items.Item item = Sitecore.Context.Database.GetItem(itemUri.ToDataUri());
                //items.Add(item);
            }
        }
        return items;
    }

ここでの結果は0です。私がここで何をしているのですか?

これは、IndexViewerに表示されているもののスナップショットです。

IndexViewer

編集:

'catQuery'で"NZ"を渡し、結果を返しています。インデックスビューアに、NZを含むフィールド名=_nameが表示されているためです。私はこの部分を手に入れました。ただし、すべてのフィールドにインデックスを付けたいと思います。IndexViewerに表示されているフィールドは_url、_group、_nameの3つだけです。

4

1 に答える 1

1

したがって、国はインデクサーによってトークン化される必要があります。マルチリストとして、それらは GUID によってトークン化されます。上記のコードを使用して、GUID で単一の国を検索するとうまくいくはずです。ただし、渡された国のいずれかが一致をトリガーできる複数の国を検索する場合は、クエリを別の方法で構造化する必要があります。

CombinedQuery query = new CombinedQuery();

//apply other filters here to query if need be

//and country filter by creating a new clause (combinedquery) and "ORing" within it (QueryOccurance.Should)
CombinedQuery query3 = new  CombinedQuery();
//here you would actually iterate over your country list
query3.Add(new FieldQuery("countries", country1GUID), QueryOccurance.Should);
query3.Add(new FieldQuery("countries", country2GUID), QueryOccurance.Should);
query.Add(query3, QueryOccurance.Must);
于 2012-09-14T19:32:20.733 に答える