- Excluding items selectively from Sitecore's Lucene search index - works when rebuilding with IndexViewer, but not when using Sitecore's built-in tools
- <search>
- <configuration type="Sitecore.Search.SearchConfiguration, Sitecore.Kernel" singleInstance="true">
- <indexes hint="list:AddIndex">
- <index id="website" singleInstance="true" type="Sitecore.Search.Index, Sitecore.Kernel">
- ...
- <locations hint="list:AddCrawler">
- <master type="MyProject.Lib.Search.Indexing.CustomCrawler, MyProject">
- ...
- </master>
- <!-- Similar entry for web database. -->
- </locations>
- </index>
- </indexes>
- </configuration>
- </search>
- using Lucene.Net.Documents;
- using Sitecore.Search.Crawlers;
- using Sitecore.Data.Items;
- namespace MyProject.Lib.Search.Indexing
- {
- public class CustomCrawler : DatabaseCrawler
- {
- /// <summary>
- /// Determines if the item should be included in the index.
- /// </summary>
- /// <param name="item"></param>
- /// <returns></returns>
- protected override bool IsMatch(Item item)
- {
- if (item["include in search results"] != "1")
- {
- return false;
- }
- return base.IsMatch(item);
- }
- }
- }
- for (int i = 0; i < database.Indexes.Count; i++)
- {
- database.Indexes[i].Rebuild(database);
- ...
- }
- <indexes>
- <index id="website" ... type="MyProject.Lib.Search.Indexing.CustomIndex, MyProject">
- ...
- </index>
- ...
- </indexes>
- using Sitecore.Data;
- using Sitecore.Data.Indexing;
- using Sitecore.Diagnostics;
- namespace MyProject.Lib.Search.Indexing
- {
- public class CustomIndex : Index
- {
- public CustomIndex(string name)
- : base(name)
- {
- }
- public override void Rebuild(Database database)
- {
- Sitecore.Search.Index index = Sitecore.Search.SearchManager.GetIndex(Name);
- if (index != null)
- {
- index.Rebuild();
- }
- }
- }
- }
- using Sitecore.Data.Items;
- using Sitecore.Search;
- using Sitecore.Search.Crawlers;
- namespace MyProject.Lib.Search.Indexing
- {
- public class CustomCrawler : DatabaseCrawler
- {
- protected override void AddItem(Item item, IndexUpdateContext context)
- {
- if (item["include in search results"] == "1")
- {
- base.AddItem(item, context);
- }
- }
- }
- }