0
SearchParam searchParam = new SearchParam();
        searchParam.Database = Fields.Database;
        searchParam.Language = Fields.Language;
        searchParam.TemplateIds = templateID;
        if (txtQuery != null && !string.IsNullOrEmpty(txtQuery))
            searchParam.FullTextQuery = txtQuery;
        QueryRunner runner = new QueryRunner("Web");
        IEnumerable<SkinnyItem> items = runner.GetItems(searchParam, sc.Search.QueryOccurance.Should, false, "", true, 0, 500);

我想搜索一个包含特定 GUID 的字段,可以吗?我已经尝试过了,但它返回的结果为 0,我确信会有结果。我错过了什么还是需要格式化 GUID 格式?这是我使用的格式“{xxx-xxx-xxx-xxxx}”

4

5 回答 5

1

确保您的索引设置正确以包含您正在搜索的字段并且您使用的是正确的查询语法。请参阅此页面,了解如何配置索引以及如何进行简单和高级搜索。

还可以尝试硬编码查询,以确保您没有在某处使用错误的值或错误的格式。

于 2013-03-06T11:58:44.003 回答
1

你的问题不清楚,所以我要在这里解释。您说要对 GUID 进行全文搜索。这自然是两个不同的东西。我假设您有一个 GUID,并且想要在索引中查找通过某个(任何?)字段分配了该 GUID 的所有项目。您需要为此使用(此处的代码RelatedIds)的属性:SearchParam

这是一些示例代码:

var searchParam = new SearchParam
{
  Database = Sitecore.Context.Database.Name,
  Language = Sitecore.Context.Language.Name,
  RelatedIds = {YOUR GUID HERE}
};

using (var runner = new QueryRunner(indexName))
{
  return runner.GetItems(searchParam);
}

此外,如果您有多个 GUID,您可以用管道分隔它们,例如RelatedIds = {GUID1}|{GUID2}

于 2013-03-06T21:22:25.973 回答
0

查看索引中的内容,您可以使用 Sitecore Rocks 检查存储的字段值 ->

右键单击您的站点,管理,索引,{您的索引}。

检查其中一个 guid 字段以查看其中的内容。

我认为它们的存储没有大括号、连字符和小写字母,您只需要在传递它之前格式化 guid。

于 2013-03-06T11:53:20.497 回答
0

如果要搜索字段值,则应使用 FieldSearchParam 而不是 SearchParam。这是示例代码:

    var searchParam = new FieldSearchParam
        {
            Database = Sitecore.Context.Database.Name,
            Language = Sitecore.Context.Language.Name,
            TemplateIds = DealerTemplateId,
            FieldName = <FieldName>,
            FieldValue = <FieldValue>
        };

        QueryRunner runner = new QueryRunner("Web");
    IEnumerable<SkinnyItem> items = runner.GetItems(searchParam);

此 FieldSearchParam 是从“Sitecore.SharedSource.Searcher”库中的 SearchParam 扩展而来的。这在开源中,您可以在项目中添加参考或获取代码。

这里要注意的一件事是FieldValue的格式,你的字段值都应该很小并且没有“-”,所以如果你的GUID是“{A9294EF5-0E36-4616-A77E-B7B100057EBA}”那么你应该传递“”a9294ef50e364616a77eb7b100057eba " 即没有 "{}" 并且所有字符都应该很小。试试这个,因为这对我有用。

注意:请确保您已按照@martijn 的建议检查配置

于 2013-03-06T12:09:47.297 回答
0

对我有用的是:

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <databases>
      <database id="master" singleInstance="true" type="Sitecore.Data.Database, Sitecore.Kernel">
        <Engines.HistoryEngine.Storage>
          <obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel">
            <param connectionStringName="$(id)" />
            <EntryLifeTime>30.00:00:00</EntryLifeTime>
          </obj>
        </Engines.HistoryEngine.Storage>
        <Engines.HistoryEngine.SaveDotNetCallStack>false</Engines.HistoryEngine.SaveDotNetCallStack>
      </database>
    </databases>
    <search>
      <configuration>
        <indexes>
          <index id="newsArticles" type="Sitecore.Search.Index, Sitecore.Kernel">
            <param desc="name">$(id)</param>
            <param desc="folder">newsArticle</param>
            <Analyzer ref="search/analyzer" />
            <locations hint="list:AddCrawler">
              <master type="Sitecore.SharedSource.SearchCrawler.Crawlers.AdvancedDatabaseCrawler,Sitecore.SharedSource.SearchCrawler">
                <Database>master</Database>
                <Root>/sitecore/content/Data</Root>
                <IndexAllFields>true</IndexAllFields>
                <MonitorChanges>true</MonitorChanges>
                <include hint="list:IncludeTemplate">
                  <News>{EF11A8D0-D373-4A4B-90BA-16984D277612}</News>
                </include>

现在我已经包含了我需要搜索索引来搜索的模板 ID。当我构建时,我可以看到包含此​​特定模板 ID 的项目存在。

现在搜索:

try
        {
            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("category", GuidsToSearchFor); //FieldName, FieldValue.
                SearchHits results = searchContext.Search(catQuery); //Searching the content items by fields.

                SearchResultCollection result = results.FetchResults(0, numOfArticles);
                RetrieveUrlListings(myItems, db, result, true);
            }
        }

您的结果将包含索引查看器中存在的项目列表。

希望这可以帮助!查看此链接了解更多信息。

于 2013-03-07T15:24:39.117 回答