0

当社の Web サイトのコンテンツ検索 (Examine を使用) が壊れています。問題は、次の 3 つのカテゴリに分類できます。

検索で削除されたページが返される:削除されたコンテンツを検索結果から削除する方法がわかりません。削除されたページを除外するフィルター条件を追加する方法はありますか?

検索はすべてのサイトからコンテンツを返します: 1 つの Umbraco インスタンスで 2 つの異なる国 (オーストラリアとニュージーランド) の 2 つの Web サイトを実行しています。問題は、検索結果が両方のサイトからページを返すことです。NZ の検索結果に AU のページは必要ありません。検索クエリを作成して特定のルート ノード ID に制限する方法は?

テンプレートなしでページを表示する:一部のコンテンツ ノードにはテンプレートが関連付けられておらず、親ノードの一部として表示されることを意図しています。検索を特定のドキュメント タイプに制限する方法はありますか? しかし、コンテンツがサブ ノードで見つかった場合、特定のドキュメント タイプで親ノードを表示しますか?

1 回の投稿であまりにも多くの質問をしている可能性がありますが、他のユーザーが以前にそのような問題に直面した可能性があると思います。

私が今まで使用しているコード:

private List<SiteSearchResult> GetSiteResults(string query, out int totalResults)
{
    var criteria = ExamineManager.Instance
        .SearchProviderCollection["WebSearcher"]
        .CreateSearchCriteria(IndexTypes.Content);
    var filter =
        criteria.GroupedOr(
            new[]
            {
                "nodeName", "heading", "content", "metaKeywords", "title", "umbracoNaviHide", "umbracoUrlName",
                "umbracoUrlAlias", "metaCategory", "metaDescription", "metaTags", "heading", "subHeading",
                "quote", "author", "socialCopy", "socialTitle", "socialTitle2", "thumbTitle", "thumbTitle2",
                "thumbCopy", "thumbQuote", "url", "location"
            }, query)
            .Compile();

    var searchResults =
        ExamineManager.Instance.SearchProviderCollection["WebSearcher"].Search(filter)
            .OrderByDescending(x => x.Score);
    totalResults = searchResults.Count();
    var results = new List<SiteSearchResult>();

    foreach (var item in searchResults)
    {
        var heading = "";
        var copy = "";
        var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);

        var url = umbracoHelper.Url(item.Id, UrlProviderMode.Relative);

        if (url.Length == 0)
        {
            continue;
        }

        if (url.StartsWith("/forms/"))
        {
            continue;
        }

        // Do many things here

        results.Add(r);
    }

    return results;
}
4

1 に答える 1

2

検索で削除されたページが返されます:

それが役立つかどうかはわかりませんが、未公開/保護された結果をインデックスから除外することができます. これは、ExamineSettings.config ファイルで行うことができます。あなたにとっては、次のようになります。

<add name="WebIndexer" 
     type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine" 
     supportUnpublished="false" 
     supportProtected="false" 
     analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" />

supportUnpublished および supportProtected フラグは、非公開/保護されたコンテンツを特定のインデックスに保存する必要があるかどうかを定義します。

テンプレートなしでページを表示する

繰り返しになりますが、ExamineIndex.config ファイルを変更して、インデックスを作成する必要があるドキュメント タイプとそうでないドキュメント タイプを指定するだけで済みます。例えば:

<IndexSet SetName="WebIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/{machinename}/Features/">
  <IndexAttributeFields>
    <add Name="id" EnableSorting="true" />
  </IndexAttributeFields>
  <IndexUserFields>     
    <add Name="exampleField" />
  </IndexUserFields>
  <IncludeNodeTypes>
    <add Name="DocumentType1" />
  </IncludeNodeTypes>
</IndexSet>

上記のインデックスには、ドキュメント タイプ「DocumentType1」のノードのみが含まれます。さらに、システム フィールドの「id」フィールドのみが保存され (およびその並べ替えが有効になります)、ユーザーが定義したフィールドの「exampleField」のみが保存されます。EncludeNodeType を使用して、インデックスに登録しないドキュメント タイプを指定することもできます。

検索はすべてのサイトからコンテンツを返しています:

これら 2 つのサイトで使用されているドキュメント タイプが異なる場合は、それぞれに 2 つの個別のインデックスを作成することで解決できます。しかし、そうでない場合、現時点で適切な方法でこれに取り組む方法についての知識はありません. 迅速な解決策として、文書が NZ 地域か AU 地域かを指定する値を保持する doc タイプにフィールドを追加することがあります。次に、それをインデックスに追加して、検索時にフィルター処理できます。しかし、それを行うより良い方法がある可能性があります。

ドキュメントを調べる

Examine インデックスとサーチャーの処理方法についての情報が必要な場合は、いつでもここを参照できます。

于 2015-11-17T15:56:31.713 に答える