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の結果を返します。sth がありませんか、それとも GUID 形式をフォーマットする必要がありますか? これは私が使用した形式です「{xxx-xxx-xxx-xxxx}」

4

5 に答える 5

1

検索するフィールドが含まれるようにインデックスが正しく設定されていること、および正しいクエリ構文を使用していることを確認してください。インデックスを構成する方法と、単純な検索と高度な検索を行う方法については、このページを参照してください。

また、ハードコーディングされたクエリを試して、どこかで間違った値を使用していないことや、間違ったフォーマットを使用していないことを確認してください。

于 2013-03-06T11:58:44.003 に答える
1

あなたの質問は不明確なので、ここで解釈します。GUID の全文検索を実行したいとします。これらは当然、2 つの別個のものです。GUID を持っていて、その GUID がいくつかの (任意の?) フィールドを介して割り当てられているインデックス内のすべてのアイテムを検索したいとします。これには( code here )の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

私にとってうまくいくのはこれです:

    <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);
            }
        }

Your result will contain the list of the items present in the index viewer.

Hope this helps! Check out this link for more.

于 2013-03-07T15:24:39.117 に答える
0

フィールド値で検索する場合は、SearchParam の代わりに FieldSearchParam を使用する必要があります。サンプルコードは次のとおりです。

    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 から拡張されています。これはオープンソースで、参照を追加するか、プロジェクトにコードを取得できます。

ここで注意すべきことの 1 つは、FieldValue の形式です。フィールド値はすべて「-」を付けずに小さくする必要があります。したがって、GUID が「{A9294EF5-0E36-4616-A77E-B7B100057EBA}」の場合は、「"a9294ef50e364616a77eb7b100057eba を渡す必要があります。 " つまり、"{}" はなく、すべての文字は小さくする必要があります。これでうまくいったので、これを試してください。

注: @martijn からの提案に従って構成を確認したことを確認してください。

于 2013-03-06T12:09:47.297 に答える