1

データベースには何百万ものアイテムがあります。そして、ユーザーはキーワードに基づいてそれらのアイテムを検索できます。検索機能では、そのキーワード以外を検索する機能を提供する必要があります。

たとえばItem A、 というフィールドがmsgあり、値はSitecore is awesome and greatです。検索ボックスで、キーワードを含まないアイテムを表示することを示すチェックボックスをオンにできます。ユーザー キーがisキーワードに含まItem Aれている可能性があるため、ADC によって表示または取得されません。

編集: 現在、私は sitecore6.6 を使用しているため、 Search メソッドは廃止されました。Occurrence.MustNot を使用して Not キーワードを試しましたが、結果が返されません。

4

3 に答える 3

0

結果アイテムセットに関連付けられたキーワードを含めないように私が行ったことは次のとおりです。

 protected List<Item> getSearchResults(string queryToSearch, string selectedFilter, string notToSearch)
    {
        Database db = Sitecore.Context.Database;
        var index = SearchManager.GetIndex("siteSearchIndexName");

        using (SortableIndexSearchContext context = new SortableIndexSearchContext(index))
        {
            if (!String.IsNullOrWhiteSpace(query))
            {
                query.ToLower();
                CombinedQuery cq = new CombinedQuery();
                QueryBase qbKeyword = new FieldQuery("_orderkeywordpair", query);
                QueryBase qbContent = new FieldQuery("_content", query);
                QueryBase qbHtml = new FieldQuery("html", query);

                if (!String.IsNullOrWhiteSpace(selectedFilter) && selectedFilter.ToLower() != "all")
                {
                    QueryBase qbFilter = new FieldQuery("_pagetype", selectedFilter);
                    cq.Add(qbFilter, QueryOccurance.Must);
                }
                cq.Add(qbKeyword, QueryOccurance.Should);
                cq.Add(qbContent, QueryOccurance.Must);
                cq.Add(qbHtml, QueryOccurance.MustNot);

                SearchHits hits = context.Search(cq);
于 2013-03-13T21:31:08.123 に答える
0

Sitecore Advanced Database Crawler は Sitecore.Search API の拡張であり、Sitecore.Search API は Lucene のラッパーです。

Lucene では、 or を使用してクエリを使用して、NOTor-のようなものを除外でき"Sitecore NOT awesome"ます"Sitecore -awesome"

何かを除外するには、少なくとも 1 つの包含用語が必要です。

うまくいくかどうかはわかりませんが、試してみてください。

于 2013-03-13T11:53:56.170 に答える
0

これはテストされていませんが、 a を使用して aMatchAllDocsQueryの形式でキーワードを指定すると、うまくいく可能性がありますFilter

BooleanQuery booleanQuery = new BooleanQuery();

QueryParser queryParser = new QueryParser("msg", new StandardAnalyzer());
Query userQuery = queryParser.Parse("Sitecore is awesome and great");
booleanQuery.Add(userQuery, reverseQuery.Checked ? BooleanClause.Occur.MUST_NOT : BooleanClause.Occur.MUST);

MatchAllDocsQuery matchAllQuery = new MatchAllDocsQuery();
Filter filter = new QueryFilter(booleanQuery);

using (QueryRunner queryRunner = new QueryRunner("myIndex"))
{
    var skinnyItems = queryRunner.RunQuery(matchAllQuery, filter, ...)
}
于 2013-03-13T16:45:53.380 に答える