Windows PowerShell を使用した CJK (中国語、日本語、および韓国語) 固有のトークン化タスク (FAST Search Server 2010 for SharePoint)
適用先: FAST Search Server 2010
トピックの最終更新日: 2015-03-09
FAST Search Server 2010 for SharePoint では、言語のトークン化と部分文字列のトークン化という 2 つの方式を使用して、既定のトークン化を調整できます。
言語のトークン化
言語のトークン化では、言語固有の規則に基づいてテキスト文字列が個々のトークンに分割されます。東アジアの言語の場合、ユーザー辞書を作成することでトークン化を調整できます。たとえば、FAST Search Server 2010 for SharePoint のシステム辞書にはない単語 (専門用語、人の名前、会社名など) がある場合、または既定のトークン化が誤っている場合は、その単語をユーザー辞書に追加することで必要に応じてトークン化できます。
部分文字列のトークン化
部分文字列のトークン化は、再現率が非常に重要なアプリケーションで特に役に立ちます。部分文字列のトークン化により、すべてのスペースがテキストから削除され、そのテキストはバイグラム (2 文字長のトークン) に分割されます。たとえば、"アメリカ" は "ア"、"アメ"、"メリ"、"リカ" に分割されます。
部分文字列によって再現率が上がりますが、精度が低下し、インデックスのサイズがかなり大きくなります。再現率を高めるよりもインデックスのサイズを抑える方が重要な場合、部分文字列のトークン化は使用しないでください。精度の低下を最小限に抑えるには、部分文字列のトークン化と言語のトークン化を組み合わせて使用します。
ヒント
言語のトークン化を使用せずに、部分文字列のトークン化のみを使用する場合、精度は非常に低くなります。通常、言語トークン化されたインデックスのヒットのランクの方が、部分文字列トークン化されたインデックスのヒットのランクより高くなります。したがって、2 つの種類のトークン化の組み合わせを使用すると、最適な精度と再現率を実現できます。
この記事の内容
東アジア言語のワード ブレーカーのユーザー辞書を作成する (言語のトークン化)
部分文字列のトークン化を構成する
言語のトークン化と部分文字列のトークン化を組み合わせて構成する
東アジア言語のワード ブレーカーのユーザー辞書を作成する (言語のトークン化)
次の最小要件を満たしていることを確認します。FAST Search Server 2010 for SharePoint がインストールされているコンピューターの FASTSearchAdministrators ローカル グループのメンバーであること。
テキスト エディターで新しいファイルを開きます。
次の規則に従って、ユーザー辞書に登録する単語を入力します。
先頭行は #CUSTOMER_WB である必要があります。
エントリの先頭文字として # 文字は使用しないでください。
エントリでスペースを使用しないでください。
スラッシュ (/) を使用して複合語のトークンの境界をマークします。韓国語のユーザー辞書では、複合語としてエントリをマークすることはできません。
例:
英語: book/shelf/cover
日本語/中国語: 朝鲜/民主/主義/人民/共和國
タイ語: กระทรวง/มหาด/ไทย
次のファイル名を使用します。
言語 ファイル名 日本語
custom0011.lex
韓国語
includeKOR.txt
タイ語
custom001e.lex
中国語 (簡体字)
custom0804.lex
中国語 (繁体字)
custom0404.lex
[ファイル] メニューの [名前を付けて保存] をクリックします。
[ファイルの種類] の一覧で [すべてのファイル] を選択します。
[エンコード] 一覧で [Unicode] を選択します。
ユーザー辞書は、FAST Search Server 2010 for SharePoint 検索またはアイテム処理が実行される各サーバーの <FASTSearchInstallationFolder>\lib\nlg\ フォルダーに保存します (<FASTSearchInstallationFolder> は FAST Search Server 2010 for SharePoint がインストールされているフォルダーのパスです (例: C:\FASTSearch))。
[スタート] メニューの [すべてのプログラム] をクリックします。
[Microsoft FAST Search Server 2010 for SharePoint shell] をクリックします。
[Microsoft FAST Search Server 2010 for SharePoint shell] をクリックします。
Windows PowerShell コマンド プロンプトで、以下のコマンドを入力し、アイテム処理およびクエリ処理を再開します。
psctrl reset nctrl restart qrserver
すべてのコンテンツを再クロールし、インデックスが作成されたコンテンツのカスタマイズを有効にします。
注意
ユーザー辞書の単語の処理は言語に応じて異なります。
中国語、日本語、およびタイ語については、トークン化においてユーザー辞書の単語が最優先されます。ドキュメント内の単語がユーザー辞書で見つかると、その単語は必ずユーザー辞書で定義されているとおりにトークン化されます。
韓国語については、ユーザー辞書で定義されているトークン化は、特定のトークン化の可能性を高めるだけにすぎません。
部分文字列のトークン化を構成する
次の手順に従って、言語のトークン化を無効にし、部分文字列のトークン化を有効にします。
次の最小要件を満たしていることを確認します。FAST Search Server 2010 for SharePoint がインストールされているコンピューターの FASTSearchAdministrators ローカル グループのメンバーであること。
FAST Search Server 2010 for SharePoint 管理サーバーで、テキスト エディターを使用して <FASTSearchInstallationFolder> components\admin-services\web.config を開きます (<FASTSearchInstallationFolder> は、FAST Search Server 2010 for SharePoint がインストールされているフォルダーのパスです (例: C:\FASTSearch))。AllowIndexPurgeOnSchemaUpdate の値を yes に設定し、すべてのアイテムのインデックスの自動再作成を有効にします。
ファイルを保存します。
[スタート] メニューの [すべてのプログラム] をクリックします。
[Microsoft FAST Search Server 2010 for SharePoint] をクリックします。
[Microsoft FAST Search Server 2010 for SharePoint shell] をクリックします。
Windows PowerShell コマンド プロンプトで、以下のコマンドを入力します。
$mp= Get-FASTSearchMetadataManagedProperty -name <ManagedPropertyName>
ここで、
- <ManagedPropertyName> は、部分文字列のトークン化を構成する管理プロパティの名前です (例: title)。
管理プロパティのプロパティを表示します。
$mp >> Name : Title >> Description : The title of the document >> Type : Text >> Queryable : True >> StemmingEnabled : True >> RefinementEnabled : False >> MergeCrawledPfopertiesAuthorityWeight : False >> SubstringEnabled : False >> DeleteDisallowed : True >> MappingDisallowed : False >> MaxIndexSize : 1024 >> MaxResultSize : 64 >> DecimalPlaces : 3 >> SortableType : SortableDisabled >> SummaryType : Dynamic
ステミングを無効にします。
$mp.StemmingEnabled=0
部分文字列を有効にします。
$mp.SubstringEnabled=1
管理プロパティを更新します。
$mp.Update()
変更されたことを確認します。
$mp >> Name : Title >> Description : The title of the document >> Type : Text >> Queryable : True >> StemmingEnabled : False >> RefinementEnabled : False >> MergeCrawledPfopertiesAuthorityWeight : False >> SubstringEnabled : True >> DeleteDisallowed : True >> MappingDisallowed : False >> MaxIndexSize : 1024 >> MaxResultSize : 64 >> DecimalPlaces : 3 >> SortableType : SortableDisabled >> SummaryType : Dynamic
Update() コマンドを実行してから部分文字列のトークン化が有効になるまでに数分かかる場合があります。数分待ってから、ドキュメントをフィードしてください。
すべてのコンテンツを再クロールします。
言語のトークン化と部分文字列のトークン化を組み合わせて構成する
2 つのトークン化モードを組み合わせるには、2 つのフルテキスト インデックスと 2 つの管理プロパティ セットを作成する必要があります。一方のインデックス/プロパティ ペアでは部分文字列のトークン化が有効になっており (SubstringEnabled=1)、もう一方のペアでは言語のトークン化が有効になっています (StemmingEnabled=1)。
検索結果内で 2 つの管理プロパティが異なるランクに割り当てられるようにするには、2 つの管理プロパティをそれぞれ異なるフルテキスト インデックスにマップする必要があります。
次の手順では、部分文字列のトークン化と言語のトークン化の両方を管理プロパティに適用する方法について説明します。
次の最小要件を満たしていることを確認します。FAST Search Server 2010 for SharePoint がインストールされているコンピューターの FASTSearchAdministrators ローカル グループのメンバーであること。
FAST Search Server 2010 for SharePoint 管理サーバーで、テキスト エディターを使用して <FASTSearchInstallationFolder>\components\admin-services\web.config を開きます (<FASTSearchInstallationFolder> は、FAST Search Server 2010 for SharePoint がインストールされているフォルダーのパスです (例: C:\FASTSearch))。AllowIndexPurgeOnSchemaUpdate の値を yes に設定し、すべてのアイテムのインデックスの自動再作成を有効にします。
ファイルを保存します。
[スタート] メニューの [すべてのプログラム] をクリックします。
[Microsoft FAST Search Server 2010 for SharePoint] をクリックします。
[Microsoft FAST Search Server 2010 for SharePoint shell] をクリックします。
Windows PowerShell コマンド プロンプトで、以下のコマンドを入力します。
Get-FASTSearchMetadataFullTextIndexMapping -ManagedProperty (Get-FASTSearchMetadataManagedProperty -name <ManagedProperty>) >> ImportanceLevel: : 7 >> ManagedProperty: : Title >> FullTextIndex: : content
ここで、
- <ManagedProperty> は、言語および部分文字列のトークン化を構成する管理プロパティの名前です (例: title)。
上記の管理プロパティとコンテンツが同じ管理プロパティを新しく作成します。
$mpSubstring=New-FASTSearchMetadataManagedProperty -name <ManagedProperty>Substring -type 1
ここで、
- <Managed_Property> は、新しく作成する管理プロパティに使用するコンテンツが含まれる管理プロパティです (例: title)。
新しい管理プロパティのプロパティを表示します。
$titleSubstring >> Name : titleSubstring >> Description : >> Type : Text >> Queryable : True >> StemmingEnabled : False >> RefinementEnabled : False >> MergeCrawledPfopertiesAuthorityWeight : False >> SubstringEnabled : False >> DeleteDisallowed : False >> MappingDisallowed : False >> MaxIndexSize : 1024 >> MaxResultSize : 64 >> DecimalPlaces : 3 >> SortableType : SortableDisabled >> SummaryType : Static
新しい管理プロパティの言語のトークン化を無効にします。
$mpSubstring.StemmingEnabled=0
新しい管理プロパティの部分文字列のトークン化を有効にします。
$mpSubstring.SubstringEnabled=1
新しい管理プロパティを更新します。
$mpSubstring.update()
2 つの管理プロパティのコンテンツが同じであることを確認するには、最初の管理プロパティのクロールされたすべてのプロパティを、新しく作成された管理プロパティにマップします。
Get-FASTSearchMetadataCrawledPropertyMapping -name <ManagedProperty>| ForEach-Object { New-FASTSearchMetadataCrawledPropertyMapping -managedproperty $mpSubstring -crawledproperty $_}
ここで、
- <ManagedProperty> は、新しい管理プロパティを作成するときに使用した管理プロパティです (例: title)。
新しいフルテキスト インデックスを作成します。フルテキスト インデックスの名前には小文字のみを使用します。
$mpSubstringIndex= New-FASTSearchMetadataFullTextIndex -Name <NewFullTextIndex> -Description "Title Substring"
ここで、
- <NewFullTextIndex> は、新しいフルテキスト インデックスの名前です (例: titlesubstringindex)。
新しいフルテキスト インデックスを表示します。
$mpSubstringIndex >> Name : titlesubstringindex >> Description : Title Substring >> StemmingEnabled: : True >> isDefault : False >> DeleteDisallowed: : False
新しいフルテキスト インデックスの言語のトークン化を無効にします。
$mpSubstringIndex.StemmingEnabled=0
新しいフルテキスト インデックスを更新します。
$mpSubstringIndex.Update()
新しいフルテキスト インデックスが更新されたことを確認します。
$mpSubstringIndex >> Name : titlesubstringindex >> Description : Title Substring >> StemmingEnabled: : False >> isDefault : False >> DeleteDisallowed: : False
新しく作成された部分文字列が有効の管理プロパティを、新しく作成された部分文字列が有効のフルテキスト インデックスにマップします。
New-FASTSearchMetadataFullTextIndexMapping -ManagedProperty $<NewManagedProperty> -FullTextIndex $<NewFullTextIndex> -ImportanceLevel 1
ここで、
<NewManagedProperty> は、新しく作成された管理プロパティの名前です (例: titleSubstring)。
<NewFullTextIndex> は、新しく作成されたフルテキスト インデックスの名前です (例: titlesubstringindex)。
両方のインデックスを格納する新しいランク プロファイルを作成します。
$NewRankProfile=New-FASTSearchMetadataRankProfile -Name <NewRankProfile>
ここで、
- <NewRankProfile> は、新しいランク プロファイルの名前です (例: DualRankProfile)。
フルテキスト インデックスで、新しく作成されたランク プロファイルに事前定義されたランク コンポーネントがあるかどうかを確認します。
$DualRankProfile.GetFullTextIndexRanks() >> FullTextIndexReference : content >> ProximityWeight : 50 >> ContextWeight: : 50
既定のインストールでは、content という名前のフルテキスト インデックスに対して事前定義されたランク コンポーネントが 1 つだけあります。
インデックス ランクがない、新しく作成されたフルテキスト インデックスに対してインデックス ランク コンポーネントを作成します。
$mpSubstringIndex= get-FASTSearchMetadataFullTextIndex -Name <NewFullTextIndex> $DualRankProfile.CreateFullTextIndexRankComponent($<NewFullTextIndex>)
ここで、
- <NewFullTextIndex> は、今作成したフルテキスト インデックスの名前です (例: titlesubstringindex)。
両方のフルテキスト インデックスのランク プロファイルにフルテキスト インデックス ランク コンポーネントがあることを確認します。
$DualRankProfile.GetFullTextIndexRanks() >> FullTextIndexReference : content >> ProximityWeight : 50 >> ContextWeight: : 50 >> FullTextIndexReference : titlesubstringindex >> ProximityWeight : 140 >> ContextWeight: : 50
言語トークン化された単語が含まれるフルテキスト インデックス (content) のランクは、部分文字列トークン化された単語が含まれるフルテキスト インデックス (titlesubstringindex) のランクよりも高くなければなりません。
言語トークン化された単語が含まれるフル インデックスを、部分文字列トークン化された単語が含まれるフルテキスト インデックスよりも高い位置にランク付けするには、部分文字列が有効のフルテキスト インデックスのコンテンツの重みを、言語トークン化されたフルテキスト インデックスの重みよりも低くします。
$ranks = $DualRankProfile.GetFullTextIndexRanks() $ranks|Where-Object -filterscript {$_.FullTextIndexReference.Name -eq "titlesubstringindex"}|ForEach-Object {$_.ContextWeight=<ContextWeight>; $_.Update()}
ここで、
- <ContextWeight> は、新しいフルテキスト インデックス (titlesubstringindex) に与える既定のフルテキスト インデックス (content) に対しての相対的なコンテキストの重みです (例: 30)。
コンテキストの重みが更新されたことを確認します。
$DualRankProfile.GetFullTextIndexRanks() >> FullTextIndexReference : content >> ProximityWeight : 50 >> ContextWeight: : 50 >> FullTextIndexReference : titlesubstringindex >> ProximityWeight : 140 >> ContextWeight: : 30