我在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();
}
如果我做错了,请帮助我。
答案 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();
}
它会起作用。