Sitecore术语查询和全文搜索

时间:2014-06-17 07:07:43

标签: sitecore

我在Sitecore中使用术语查询没有得到任何结果。我不确定我做错了什么。 以下是我的配置设置。

<demo type="scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler,scSearchContrib.Crawler">
      <Database>web</Database>
      <Root>/sitecore/content/rootPath</Root>
      <IndexAllFields>true</IndexAllFields>

      <include hint="list:IncludeTemplate">
        <uniqueTemplateToken1>
            {2BCE925C-6ED5-4F76-99D6-BF928A62819B}
        </uniqueTemplateToken1>
      </include>

      <include hint="list:IncludeField">
        <fieldId>{7D55A5C3-CAF5-4570-AA7B-1240836BEE8D}</fieldId>
      </include>

      <fieldTypes hint="raw:AddFieldTypes">
        <fieldType name="Multi-Line Text" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" />
      </fieldTypes>
    </demo>

这是我的代码,其中“描述”是我的归档名称和我在配置中定义的相同的归档名称。每次我得到“0”结果。

using (IndexSearchContext sc = SearchManager.GetIndex("demo").CreateSearchContext())          
{            
    TermQuery createdByAdminQuery = new TermQuery(new Term("Description", "Lorem"));
    BooleanQuery query = new BooleanQuery();
    query.Add(createdByAdminQuery, BooleanClause.Occur.MUST);
    query.SetMinimumNumberShouldMatch(1);

    TopDocs topDocs = sc.Searcher.Search(query, int.MaxValue);
    SearchHits searchHits = new SearchHits(topDocs,sc.Searcher.GetIndexReader());
    return searchHits.FetchResults(0, int.MaxValue).Select(r => r.GetObject<Item>()).ToList();
}

如果我做错了,请帮助我。

2 个答案:

答案 0 :(得分:3)

在这种情况下,您应该更改的唯一明显的事情是您的搜索字词。 “Lorem”到“lorem”。简而言之,当您的文档被索引和标记化时,它们将以小写形式存储在索引中。这是针对Sitecore实现的,而不是Lucene自己做的事情。

我和你有同样的问题(或至少我相信):TermQuery not returning on a known search term, but WildcardQuery does

答案 1 :(得分:1)

感谢您的帮助。

最后我得到了解决这个问题的方法。问题在于使用术语查询。我使用Term查询的方式不正确。 以下是正确的方法:

using (IndexSearchContext sc = SearchManager.GetIndex("demo").CreateSearchContext())
{
    Term term = new Term("description", "tutu");
    Query query1 = new TermQuery(term);
    SearchHits searchHits = sc.Search(query1, int.MaxValue);
    sc.Searcher.GetIndexReader());

    return searchHits
           .FetchResults(0, int.MaxValue)
           .Select(r => r.GetObject<Item>()).ToList();
}

它会起作用。