どのように私は、スキル管理プロパティによってMOSSフルテキストSQLクエリとフィルタの人々の結果を実行していますか?
-
21-09-2019 - |
質問
私は、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