如何使用特殊字符查询Sitecore SOLR?

时间:2015-11-18 17:02:27

标签: sitecore solr4 sitecore7.5

我希望能够构建网站搜索页面,并允许用户在其查询中包含特殊的Solr字符(使用Sitecore 7.5和SOLR 4.7)。例如,我希望用户能够搜索“f(x)”。我有一些代码似乎有时会起作用。基本上它逃脱了特殊的角色。如果我搜索“f(x)”它工作正常。但是,如果我想在我的查询中有2个术语并搜索“f(x)green”,则它不起作用。它似乎只是搜索精确的短语“f(x)green”。常规查询工作正常。如果我搜索“绿色黄色”,它将返回所有带有绿色或黄色的文档,如果我搜索“黄绿色”,我会得到相同的结果,这很好。如果我搜索“f(x)”,我会得到我期望的结果。但是,如果我搜索“f(x)绿色”,我得到的结果不是我所期望的。我的搜索代码如下。

var specialSOLRChars = @"\+\-\&\|\!\(\)\{\}\[\]\^\""\~\*\?\:\\";

using (var context = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext()) {

   var query = context.GetQueryable<GeneralSearchResultItem>().Where(x => !x.IsStandardValue && x.Language == Sitecore.Context.Language.Name);
   var isSpecialMatch = Regex.IsMatch(searchTerm, "[" + specialSOLRChars + "]");
   if (isSpecialMatch) {
      var wildcardText = string.Format("\"*{0}*\"", Regex.Replace(searchTerm, "([" + specialSOLRChars + "])", @"\$1"));
      query = query.Where(i => (i.Content.MatchWildcard(wildcardText) || i.Name.MatchWildcard(wildcardText));
   } 
   else {
      query = query.Where(i => (i.Content.Contains(searchTerm) ||    i.Name.Contains(searchTerm));
   }
   var results = query.GetResults();
   return results;
}

1 个答案:

答案 0 :(得分:1)

您似乎打算获得包含 f(x)绿色的搜索结果,并且还包含其中任何一个。

要模仿此行为,您应该使用空格拆分搜索字词,并检查 Content.Contains()两者,用 || 条件分隔。当您搜索 f(x)绿色

时,这将为您提供结果