2015-03-07 1 views
2

J'ai un seau avec plus de 30 000 articles à l'intérieur. Ce dont j'ai besoin est de rechercher rapidement des éléments qui ont un champ particulier à une valeur particulière, ou mieux encore de faire quelque chose comme SELECT WHERE fieldValue IN (1,2,3,4) déclaration. Y a-t-il des solutions prêtes? J'ai cherché sur le Web et la seule chose que j'ai trouvé est "Guide du développeur de l'article seaux et de la recherche" mais il n'y a pas d'exemples de code.Sitecore HOWTO: Seau d'élément de recherche pour les articles avec des valeurs spécifiques

+0

Comme vous pouvez le voir ci-dessous peut par réponse que vous pouvez utiliser le Sitecore 7 api. Les liens des guides de démarrage rapide ont été écrits par moi et je vous en serais reconnaissant si j'en tenais compte lors de la correction de la réponse. J'espère que cela résout votre problème. –

Répondre

5

En utilisant Sitecore Content Editor:

Aller à l'élément de seau, puis dans l'onglet recherche, commencez à taper les éléments suivants (fieldName et de la valeur avec le nom de champ réel et la valeur):

personnalisé: fieldname | valeur

Ensuite, appuyez sur Entrée, vous voyez le résultat de la requête, vous pouvez plusieurs requêtes à la fois si vous le souhaitez.

En utilisant Sitecore contenu Search API:

using Sitecore.ContentSearch; 
using Sitecore.ContentSearch.Linq; 
using Sitecore.ContentSearch.SearchTypes; 
using Sitecore.ContentSearch.Linq.Utilities 

ID bucketItemID = "GUID of your bucket item"; 
ID templateID = "Guid of your item's template under bucket"; 
string values = "1,2,3,4,5"; 

using (var context = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext()) 
{ 
    var predicate = PredicateBuilder.True<SearchResultItem>(); 
    predicate = PredicateBuilder.And(item => item.TemplateId == new ID(templateID) 
            && item.Paths.Contains(bucketItemID)); 
    var innerPredicate = PredicateBuilder.False<SearchResultItem>(); 
    foreach(string val in values.Split(',')) 
    { 
     innerPredicate = PredicateBuilder.False<SearchResultItem>(); 
     innerPredicate = innerPredicate.Or(item => item["FIELDNAME"] == val); 
    } 
    predicate = predicate.And(innerPredicate); 

    var result = predicate.GetResults(); 
    List<Item> ResultsItems = new List<Item>(); 
    foreach (var hit in result.Hits) 
    { 
     Item item = hit.Document.GetItem(); 
     if(item !=null) 
     { 
      ResultsItems .Add(item); 
     } 
    } 
} 

Les liens suivants peuvent donner un bon départ avec l'API de recherche:

  1. http://www.fusionworkshop.co.uk/news-and-insight/tech-lab/sitecore-7-search-a-quickstart-guide#.VPw8AC4kWnI
  2. https://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/06/sitecore-7-poco-explained.aspx
  3. https://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/05/sitecore-7-predicate-builder.aspx

Espérons que cela aide!

6

Vous avez besoin de quelque chose comme ça. L'élément Bucket est un index IIndexable, il peut donc être recherché à l'aide de l'API de recherche Sitecore 7.

Cet extrait de code ci-dessous peut facilement être adapté à vos besoins et il suffit de modifier la clause where.Si vous avez besoin d'aide pour la syntaxe sitecore 7, écrivez simplement un commentaire sur le blog QuickStart ci-dessous. Je reviendrai à vous.

var bucketItem = Sitecore.Context.Database.GetItem(bucketPath); 
    if (bucketItem != null && BucketManager.IsBucket(bucketItem)) 
    {  
    using (var searchContext = ContentSearchManager.GetIndex(bucketItem as IIndexable).CreateSearchContext()) 
    { 
     var result = searchContext.GetQueryable<SearchResultItem().Where(x => x.Name == itemName).FirstOrDefault(); 
     if(result != null) 
      Context.Item = result.GetItem(); 
    } 
    } 

Pour en savoir plus sur mon blog ici:

http://coreblimey.azurewebsites.net/sitecore-7-search-quick-start-guide/

+0

Savez-vous pourquoi bucketItem comme IIndexable serait null? – Ernesto

+0

@Ernesto Je suis vraiment en retard à la fête ici mais le correctif devrait être de passer votre article au constructeur de la valeur SitecoreIndexableItem. 'var indexableItem = nouveau SitecoreIndexableItem (bucketItem);' – Teeknow