どのように私は、スキル管理プロパティによってMOSSフルテキストSQLクエリとフィルタの人々の結果を実行していますか?

StackOverflow https://stackoverflow.com/questions/2293066

質問

述語CONTAINSを使用してプロパティを管理スキルのフィルタ人々の結果にしようとすると、

私は、MOSS FulltextSqlQueryとのトラブルを抱えています。私が証明してみましょう。

Aクエリフィルタなしで期待される結果を返します

SELECT AccountName, Skills
from scope()
where freetext(defaultproperties,'+Bob')
And ("scope" = 'People')

結果
Total Rows: 1
ACCOUNTNAME: MYDOMAIN\Bob
SKILLS: Numchucks | ASP.Net | Application Architecture

しかし、私はCONTAINS述語を追加するとき、私はもはや期待される結果が得られません。

SELECT AccountName, Skills
from scope()
where freetext(defaultproperties,'+Bob')
And ("scope" = 'People')
And (CONTAINS(Skills, 'Numchucks'))

結果
Total Rows: 0

私は、私はいくつかのARRAY述語を使用してこれを実現することができます実現しますが、私は、これはスキルプロパティのCONTAINS述語で作業されていない理由を知っていただきたいと思います。私は、「複数値」として示されているカスタムクロールされたプロパティでCONTAINS述語を使用して成功しています。スキルプロパティ(多値のようですが)SSP管理サイトにクロールされたプロパティページのように示されていません。

のhttp:?///ssp/admin/_layouts/schema.aspx ConsoleView = crawledPropertiesView&カテゴリ=ピープル

誰でも任意のアイデアがありますか?

役に立ちましたか?

解決

だから、マーク・キャメロン(マイクロソフトのSharePoint開発者サポート)の助けを借りて、私は特定の管理プロパティがなければならないことを考え出しの有効化のFullTextQueriableプロパティを設定することによりManagedPropertyオブジェクトモデルのAPIを使用して、フルテキスト検索のためのtrueに。以下は私のために、この問題を解決する方法です。これは、コンソールアプリやファームまたはWebアプリケーションの機能Receiverをスコープとして含めることができます。

    using Microsoft.Office.Server;
    using Microsoft.Office.Server.Search.Administration;

    private void EnsureFullTextQueriableManagedProperties(ServerContext serverContext)
    {
        var schema = new Schema(SearchContext.GetContext(serverContext));
        var managedProperties = new[] { "SKILLS", "INTERESTS" };
        foreach (ManagedProperty managedProperty in schema.AllManagedProperties)
        {
            if (!managedProperties.Contains(managedProperty.Name.ToUpper()))
                continue;

            if (managedProperty.FullTextQueriable)
                continue;

            try
            {
                managedProperty.FullTextQueriable = true;
                managedProperty.Update();
                Log.Info(m => m("Successfully set managed property {0} to be FullTextQueriable", managedProperty.Name));
            }
            catch (Exception e)
            {
                Log.Error(m => m("Error updating managed property {0}", managedProperty.Name), e);
            }
        }
    }

他のヒント

SELECT AccountName, Skills
from scope()
where freetext(defaultproperties,'+Bob')
And ("scope" = 'People')
And (CONTAINS(Skills, 'Numchucks*'))

最後に*を使用します。

あなたも試すためにいくつかのより多くのオプションがあります:

  

次のリストを識別   ある追加のクエリ要素   SQL検索構文でのみサポート   FullTextSqlQueryクラスを使用します:

     

FREETEXT()

     

(CONTAINS)

     

LIKE

する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top