2014-09-18 2 views
1

Sitecore 6.6 웹 사이트에 검색 색인을 추가했습니다. 테스트를 위해 색인 매개 변수와 일치하는 두 개의 항목을 만들었습니다. 즉, 색인 된 단일 템플릿을 사용합니다.Sitecore 6.6 Lucene 검색 - Guid 값을 검색 할 수 없습니다.

이 템플릿에는 "스토리 데이터 항목"이라는 DropLink 필드가 있으며,이 필드의 값이 제공된 Guid와 일치하는 모든 항목을 반환합니다.

다음 코드는 모든 인덱싱 된 문서를 반환하고 실행하면 인덱싱 된 것을 나타내는 두 항목이 모두 반환됩니다. 나는 지금까지 내가 이해가 같은 가이 드의 관련 필드를 검색해야 다음에 쿼리를 변경하는 경우 items.First().Fields["Story Data Item"].Value == "{3F810A26-5D57-49CA-8D16-8BE4FDA404E2}"

Index indx = SearchManager.GetIndex("hos"); 
IEnumerable<Item> items = new List<Item>(); 
Sitecore.Search.SearchResultCollection results; 
using (IndexSearchContext searchContext = indx.CreateSearchContext()) 
{ 
    SearchHits hits = searchContext.Search(new Lucene.Net.Search.MatchAllDocsQuery(), int.MaxValue); 
    results = hits.FetchResults(0, hits.Length); 
} 
items = results.Select(result => result.GetObject<Item>()).Where(item => item != null).ToArray(); 

, 나는 어떤 결과를 얻을 수 없습니다 : 또한, 첫 번째 항목이 조건을 충족합니다. 나는 이해하지 못한다. 나는 케이스가 낮추고 Guid가 ShortID로 변환되었는지 확인하는 것에 대한 모든 조언을 따랐습니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 다음과 같이

Index indx = SearchManager.GetIndex("hos"); 
IEnumerable<Item> items = new List<Item>(); 
Sitecore.Search.SearchResultCollection results; 
using (IndexSearchContext searchContext = indx.CreateSearchContext()) 
{ 
    FieldQuery fldQuery = new FieldQuery("Story Data Item".ToLowerInvariant(), ShortID.Encode(new Guid("{3F810A26-5D57-49CA-8D16-8BE4FDA404E2}")).ToLowerInvariant()); 
    SearchHits hits = searchContext.Search(fldQuery, int.MaxValue); 
    results = hits.FetchResults(0, hits.Length); 
} 
items = results.Select(result => result.GetObject<Item>()).Where(item => item != null).ToArray(); 

인덱스가 구성됩니다

 <index id="hos" type="Sitecore.Search.Index, Sitecore.Kernel"> 
     <param desc="name">$(id)</param> 
     <param desc="folder">__hos</param> 
     <Analyzer ref="search/analyzer" /> 
     <locations hint="list:AddCrawler"> 
      <master type="Sitecore.Search.Crawlers.DatabaseCrawler, Sitecore.Kernel"> 
      <Database>master</Database> 
      <Tags>master hos</Tags> 
      <Root>/sitecore/content/Home/my_root</Root> 
      <include hint="list:IncludeTemplate"> 
       <story>{AB3023C3-331D-4DD0-86B2-F8F48E1287EC}</story> 
      </include> 
      <Boost>2.0</Boost> 
      </master> 
      <master type="Sitecore.Search.Crawlers.DatabaseCrawler, Sitecore.Kernel"> 
      <Database>web</Database> 
      <Tags>web hos</Tags> 
      <Root>/sitecore/content/Home/my_root</Root> 
      <include hint="list:IncludeTemplate"> 
       <story>{AB3023C3-331D-4DD0-86B2-F8F48E1287EC}</story> 
      </include> 
      <Boost>2.0</Boost> 
      </master> 
     </locations> 
     </index> 

내가 여기 조언을 따랐다 - droplink and treelist values in sitecore search-BooleanQuery하지만 차를 이용에 관한.

또한, 누가는 인덱스가 원하는 데이터를 보유 확인 :

enter image description here

모두 크게 감사합니다 도움이됩니다.

답변

3

그냥 TermQueryFieldQuery을 변경하고 코드가 작동합니다

Index indx = SearchManager.GetIndex("hos"); 
IEnumerable<Item> items = new List<Item>(); 
Sitecore.Search.SearchResultCollection results; 
using (IndexSearchContext searchContext = indx.CreateSearchContext()) 
{ 
    TermQuery termQuery = new TermQuery(new Term("story data item", "{3F810A26-5D57-49CA-8D16-8BE4FDA404E2}".ToLower())); 
    SearchHits hits = searchContext.Search(termQuery, int.MaxValue); 
    results = hits.FetchResults(0, hits.Length); 
} 
items = results.Select(result => result.GetObject<Item>()).Where(item => item != null).ToArray(); 
관련 문제