Lucene搜索不起作用

时间:2012-09-13 22:03:03

标签: c# search lucene sitecore sitecore6

我有一个功能可以搜索Sitecore内容项中的一些文章并给我价值。到目前为止,我已经建立了我的索引,并在我的IndexViewer中显示。但函数的返回值为0.我查找了这个链接:http://sitecoregadgets.blogspot.com/2009/11/working-with-lucene-search-index-in_25.html以获取更多信息。

 protected IEnumerable<Item> ShowHomePageNews(int numOfArticles, string stringofCountries)
    {
        List<Item> items = new List<Item>();
        Sitecore.Search.Index indx = SearchManager.GetIndex("newsArticles");
        using (IndexSearchContext searchContext = indx.CreateSearchContext())
        {
            var db = Sitecore.Context.Database;
            CombinedQuery query = new CombinedQuery();
            QueryBase catQuery = new FieldQuery("countries", stringofCountries); //FieldName, FieldValue.
            SearchHits results = searchContext.Search(catQuery); //Searching the content items by fields.
            SearchResultCollection result = results.FetchResults(0, numOfArticles);
            foreach (SearchResult i in result)
            {
                items = result
                              .Where(r => !r.Title.StartsWith("*"))
                              .Select(r => db.GetItem(new Sitecore.Data.ItemUri(r.Url).ToDataUri()))
                              .ToList();
                //Lucene.Net.Documents.Field url = i.Document.GetField("_url");
                //Sitecore.Data.ItemUri itemUri = new Sitecore.Data.ItemUri(url.StringValue());
                //Sitecore.Data.Items.Item item = Sitecore.Context.Database.GetItem(itemUri.ToDataUri());
                //items.Add(item);
            }
        }
        return items;
    }

在这里,结果是0.我在做什么呢?

这是我在IndexViewer中看到的快照:

IndexViewer

修改

我在'catQuery'中传递了一个“NZ”,我得到了结果。因为在我的索引查看器中,我看到字段名称= _name,其中包含NZ。我得到了这个部分。但是,我希望我的每个字段都被编入索引。我在IndexViewer中只看到3个字段:_url,_group&amp; _名称。

1 个答案:

答案 0 :(得分:1)

所以你的国家应该被索引器标记化。作为多列表,它们将由GUID标记化。使用上面的代码通过GUID搜索单个国家/地区应该有效。但是,如果您要搜索多个国家/地区,其中任何传入的国家/地区都可以触发匹配,则需要以不同方式构建查询。

CombinedQuery query = new CombinedQuery();

//apply other filters here to query if need be

//and country filter by creating a new clause (combinedquery) and "ORing" within it (QueryOccurance.Should)
CombinedQuery query3 = new  CombinedQuery();
//here you would actually iterate over your country list
query3.Add(new FieldQuery("countries", country1GUID), QueryOccurance.Should);
query3.Add(new FieldQuery("countries", country2GUID), QueryOccurance.Should);
query.Add(query3, QueryOccurance.Must);