如何在lucene搜索期间使用ADC来排除不需要的项目? (鉴于我有几百万件物品) 鉴于不需要的项目不时有所不同,因此,我无法使用配置文件将其排除。
答案 0 :(得分:4)
根据我的理解,您希望能够手动设置一些排除在搜索结果中的项目。
最简单的解决方案是在基本模板中添加一些Exclude
布尔标志,并在搜索项目时检查此标志。
另一种解决方案是为搜索中排除的项目创建一个包含multilist
字段的设置页面,然后将所选项目的ID传递给搜索查询,将其排除在搜索范围之外。
答案 1 :(得分:3)
下面是一个非常广泛的概述,你需要做些什么才能实现这一目标。它的作用是防止在sitecore中检查了复选框字段的项目甚至被索引。对不起,这不容易!
要求:高级数据库抓取工具:http://marketplace.sitecore.net/en/Modules/Search_Contrib.aspx
1)在sitecore的基本模板中添加一个复选框字段,标题为“从搜索中排除”或其他任何内容。
2)创建将索引新字段的自定义索引搜寻器。
namespace YourNamespace
{
class MyIndexCrawler : Sitecore.SharedSource.SearchCrawler.Crawlers.AdvancedDatabaseCrawler
{
protected override void AddSpecialFields(Lucene.Net.Documents.Document document, Sitecore.Data.Items.Item item)
{
base.AddSpecialFields(document, item);
document.Add(CreateValueField("exclude from search",
string.IsNullOrEmpty(item["Exclude From Search"])
? "0"
: "1"));
3)配置Lucene使用新的自定义索引搜寻器(如果您不使用包含,则为Web.config)
<configuration>
<indexes hint="list:AddIndex">
...
<locations hint="list:AddCrawler">
<master type="YourNameSpace.MyIndexCrawler,YourNameSpace">
<Database>web</Database>
<Root>/sitecore/content</Root>
<IndexAllFields>true</IndexAllFields>
4)配置您的搜索查询
var excludeQuery = new BooleanQuery();
Query exclude = new TermQuery(new Term("exclude from search", "0"));
excludeQuery.Add(exclude, BooleanClause.Occur.MUST);
5)获取搜索结果
var db = Sitecore.Context.Database;
var index = SearchManager.GetIndex("name_of_your_index"); // I use db.Name.ToLower() for my master/web indexes
var context = index.CreateSearchContext();
var searchContext = new SearchContext(db.GetItem(rootItem));
var hits = context.Search(excludeQuery, searchContext);
注意:您可以在此处使用合并查询,以便在搜索时获得更大的灵活性!