这是我第一次使用Examine - 到目前为止这是有效的,results
变量有正确的数据,但我想要做的是添加我要搜索的searchTerm
变量当前在results
任何想法? - 提前致谢。
var searchEngine = ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"];
var criteria = searchEngine.CreateSearchCriteria(BooleanOperation.Or);
IBooleanOperation query = criteria.NodeTypeAlias("level1")
.Or().NodeTypeAlias("level2")
.Or().NodeTypeAlias("simpleTextPage")
.Or().NodeTypeAlias("contactPage")
.Or().NodeTypeAlias("Locationfinder");
string searchTerm = "Term to Search for here";
var results = searchEngine.Search(query.Compile());
答案 0 :(得分:3)
这个答案有两个部分。首先,您需要指定要搜索的字段:
.Or().Field("bodyText", searchTerm)
这假设您的网页具有bodyText
属性。您可以在此附加其他字段以搜索其他属性,例如name,introText等。
其次,如果要搜索所有字段,则需要创建一个字段,其中包含要编制索引的页面中的所有文本内容。你需要:
IApplicationEventHandler
; 添加用于收集节点数据的处理程序:
void OnApplicationStarted(UmbracoApplicationBase app, ApplicationContext ctx)
{
ExamineManager.Instance
.IndexProviderCollection["ExternalIndexer"]
.GatheringNodeData += OnGatheringNodeData;
}
创建合并字段:
protected void OnGatheringNodeData(object sender, IndexingNodeDataEventArgs e)
{
var builder = new StringBuilder();
foreach (var entry in e.Fields)
{
builder.AppendFormat("{0}, ", entry.Value);
}
e.Fields.Add("combinedText", builder.ToString());
}
.Or().Field("combinedText", searchTerm)
; 现在,每次发布一个页面时,它都会将所有字段合并为一个字段,以便可以按照您希望的方式进行搜索。
但是,就个人而言,我建议您选择要合并的特定字段,因为很少需要将所有字段组合在一起。这通常表明您的文档类型几乎没有一致性。我总是在我的所有doc类型中使用常见的别名,原因如下,例如: bodyText,introText,summaryText等。如果需要,我可以过滤掉以“Text”结尾的字段或将我的别名作为静态字符串。