简体   繁体   中英

Umbraco Examine Search Indexing

I have configured examine indexing in umbraco 7, it index some pages but not all, for example i have two pages of same document type one of them is index in search but portion of text content above image in rich text editor and below that image content is also not index ? Unable to figure out mistake, here is my Examine config

ExamineIndex.config :

<ExamineLuceneIndexSets>
  <!-- The internal index set used by Umbraco back-office - DO NOT REMOVE -->
  <IndexSet SetName="InternalIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/Internal/"/>

  <!-- The internal index set used by Umbraco back-office for indexing members - DO NOT REMOVE -->
  <IndexSet SetName="InternalMemberIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/InternalMember/">
    <IndexAttributeFields>
      <add Name="id" />
      <add Name="nodeName"/>
      <add Name="updateDate" />
      <add Name="writerName" />
      <add Name="loginName" />
      <add Name="email" />
      <add Name="nodeTypeAlias" />
    </IndexAttributeFields>
  </IndexSet>

  <!-- Default Indexset for external searches, this indexes all fields on all types of nodes-->
  <IndexSet SetName="ExternalIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/External/" />


  <IndexSet SetName="MySearch" IndexPath="~/App_Data/ExamineIndexes/MySearch/">
    <IndexAttributeFields>
      <add Name="id" />
      <add Name="nodeName"/>
      <add Name="updateDate" />
      <add Name="writerName" />
      <add Name="nodeTypeAlias" />
    </IndexAttributeFields>
    <IndexUserFields>

      <add Name="pageBodyText"/>
      <add Name="bodyText"/>
      <add Name="title"/>
      <add Name="summary"/>
      <add Name="projectTitle"/>
      <add Name="projectDescription"/>     
      <add Name="rightBoxContent"/>
      <add Name="leftBoxContent"/>

      <!--<add Name="siteName"/>-->
    </IndexUserFields>
    <IncludeNodeTypes>
      <!--<add Name="umbHomePage" />-->
      <add Name="umbHomePage" />
      <add Name="Page" />
      <add Name="NewsItem" />
      <add Name="Project" />
      <add Name="Service" />  
      <add Name="Client" />


      <!--<add Name="PageWithPlugin" />-->
    <!--NewsItem,Project,Service,Page,umbHomePage,Client-->
    </IncludeNodeTypes>
  </IndexSet>

  <!--<IndexSet SetName="MySearchIndexer" IndexPath="~/App_Data/TEMP/ExamineIndexes/MySearchIndexer/" />-->

</ExamineLuceneIndexSets>

ExamineSettings.config:

<Examine>
  <ExamineIndexProviders>
    <providers>
      <add name="InternalIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"
           supportUnpublished="true"
           supportProtected="true"
           analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

      <add name="InternalMemberIndexer" type="UmbracoExamine.UmbracoMemberIndexer, UmbracoExamine"
           supportUnpublished="true"
           supportProtected="true"
           analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"/>

        <!-- default external indexer, which excludes protected and unpublished pages-->
        <add name="ExternalIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"/>

      <add name="MySearchIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"
      supportUnpublished="false"
      supportProtected="true"
      interval="10"
      analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"
      indexSet="MySearch"/>


      <!--<add name="MySearchSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
      analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" indexSet="MySearch" enableLeadingWildcards="true"/>-->



    </providers>
  </ExamineIndexProviders>

  <ExamineSearchProviders defaultProvider="ExternalSearcher">
    <providers>
      <add name="InternalSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
           analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

      <add name="ExternalSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine" />

      <add name="InternalMemberSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
           analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" enableLeadingWildcard="true"/>

      <add name="MySearchSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
      analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" indexSet="MySearch" enableLeadingWildcards="true" />

    </providers>
  </ExamineSearchProviders>

</Examine>

Macro Code:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using Examine.LuceneEngine.SearchCriteria

@{
    if (!string.IsNullOrEmpty(Request.QueryString["search"]))
    {
        var q = Request.QueryString["search"];
        var Searcher = Examine.ExamineManager.Instance.SearchProviderCollection["MySearchSearcher"];

        var searchResults = Searcher.Search(q, true).OrderByDescending(x => x.Score).TakeWhile(x => x.Score > 0.05f);
        bool isRecordFound = false;
    <ul>
        @foreach (var item in searchResults)
        {
            IPublishedContent node = Umbraco.Content(item.Fields["id"]);        
            <li>
                <a href="@node.Url">
                    @node.Name
                </a>
            </li>
            isRecordFound = true;

        }
    </ul>       

        if (!isRecordFound)
        {
    <div>
        <h1>No Record Found</h1>
    </div>
        }

    }
 }
if (!string.IsNullOrEmpty(Request.QueryString["search"]))

I had the same issue here. So here's what I was doing wrong. Right now, you're "Requesting" a "QueryString" named "search". You don't have that query string. On the other hand, you need to create it.

All you have now is a string named "search" , not a QueryString therefore Request.Querystring["search"] returns the value null .

I was using MVC in a controller when doing it and my logic told me eventually that what I should have done is search my Model for my variable named "search". Basically I replaced the original if with

if (!string.IsNullOrEmpty(model.search))
{
Your code here
}

What this did was telling the controller to go and find the variable named "search" in my "model" and "if" the !string.IsNullOrEmpty, then execute my code underneath.

I haven't read your whole code and as I said I was using MVC when doing it, so adjust it to your own code as you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM