indexingumbracoumbraco7examine

Get typed document from an index using Umbraco


What I'll try

I've got a lot of persons inside the content tree and I'll create a new index for that. This is for improve the performance of the web application when searching for a specific person.


Create the index

I've made a new index in the examine manager from Umbraco 7.7 named PersonIndexer to index all the persons. This includes only the node types of a person.

Examine Manager from Umbraco

For this I've made this code:

ExamineSettings.config

Inside the file ExamineSettings.config inside the ExamineExamineIndexProvidersproviders tag:

<add name="PersonsIndexer" 
     type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine" 
     supportUnpublished="false"
     supportProtected="true" 
     indexSet="Persons"
     analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

And inside the same file I've also added this but inside the ExamineExamineSearchProvidersproviders tag:

<add name="PersonsSearcher" 
     type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine" 
     supportUnpublished="false"
     supportProtected="true" 
     indexSet="Persons"
     analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

ExamineIndex.config

Inside the file ExamineIndex.config inside the ExamineLuceneIndexSets tag:

<IndexSet SetName="Persons" IndexPath="~/App_Data/TEMP/ExamineIndexes/Persons/" >
    <IndexAttributeFields>
        <add Name="knowledge" />
        <add Name="photo" />
        <add Name="name"/>
        <add Name="firstName"/>
        <add Name="lastName"/>
    </IndexAttributeFields>

    <IncludeNodeTypes>
        <add Name="person" />
    </IncludeNodeTypes>
</IndexSet>

Get the documents

When I build this index, it got 7 documents inside the index.

After building the index

How can I get all this documents inside my view. I've tried this code:

var indexer = ExamineManager.Instance.IndexProviderCollection["PersonsIndexer"];

This gives me all properties of that index.

Quick watch of the indexer variable


The question

This isn't what I need. So my question is: How could I get the typed documents from that index?


Edit

After @Marks answer I've tried his code but when I watch searchResults I've got this:

An empty list

When I do a Lucene search of *, I've got 7 results.

Lucene search of * gives 7 results

When I do a text search xor I text xor lucene search on an empty string, I've got nothing.


Solution

  • You'll want to use the searcher to retrieve the documents.

    Here's a little example of some code I used to retrieve documents from the index, hope it helps you.

    var searcher = ExamineManager.Instance.SearchProviderCollection["PersonsSearcher"];
    var searchCriteria = searcher.CreateSearchCriteria();
    var query = searchCriteria.Field("nodeTypeAlias", "person").Compile();
    var searchResults = searcher.Search(query);
    

    Edit

    I've taken a look at my ExamineIndex.config and you'll have to define the default Umbraco properties and user defined properties seperately in the XML.

    A little example of my CustomIndexSet.

    <IndexSet SetName="CustomIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/Custom/">
        <IndexAttributeFields>
          <add Name="id" />
          <add Name="nodeName"/>
          <add Name="updateDate" />
          <add Name="nodeTypeAlias" />
        </IndexAttributeFields>
        <IndexUserFields>
          <add Name="category" />
          <add Name="title" />
          <add Name="description" />
          <add Name="status" />
          <add Name="keywords" />
        </IndexUserFields>
        <IncludeNodeTypes>
          <add Name="item"/>
          <add Name="category"/>
        </IncludeNodeTypes>
    </IndexSet>