3

リモート ファイル共有 (Windows Server 2008 R2 を実行) でテキストを含むファイルを検索しようとしています。これを試してみると、うまくいきます:

SELECT System.FileName
FROM RemoteServer.SystemIndex 
WHERE SCOPE='file://RemoteServer/FileShare'

そして多くの結果を得ています。しかし、テキストを検索しようとするとすぐに結果が得られません。

SELECT System.FileName
FROM RemoteServer.SystemIndex 
WHERE SCOPE='file://RemoteServer/FileShare'
AND CONTAINS('a')

自分のマシン (Windows 7) で試してみると、問題なく動作します。

SELECT FileName
FROM SystemIndex 
WHERE CONTAINS('a')

検索に使用しているC#コードは次のとおりです。

string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
using (OleDbConnection myOleDbConnection  = new OleDbConnection(connectionString))
{
    myOleDbConnection.Open();
    using (OleDbCommand myOleDbCommand  = new OleDbCommand(sql, myOleDbConnection))
    {
        using (myDataReader = myOleDbCommand.ExecuteReader())
        {
            if (!myDataReader.HasRows)
            {
                System.Console.WriteLine("Query returned 0 rows!");
            }
            else
            {
                // Process results here
            }
        }
    }
}

私は次のことを試しました:

  • インデックスを再構築する
  • インデックスを作成するサーバーに「FileShare」フォルダが追加されていることを確認
  • 「ファイルの種類」タブを確認し、正しい拡張子がチェックされていること、およびそれらの拡張子に対して「インデックスのプロパティとファイルの内容」が選択されていることを確認しました
  • インデックス サービスを再開しました
  • サーバー自体を再起動しました

無駄に。

他の提案はありますか?私はそこに99%いるのでイライラします。この Windows デスクトップ全体の検索は、かなりサポートされていないようです。おそらく、それをビンに入れ、別のものを使用する必要がありますか?

4

2 に答える 2

2

検索語の nvarchar 変数を宣言してみてください

DECLARE @SearchWord nvarchar(30) = 'a'

次に、コードを次のように変更します。

ファイル名を選択

FROM SystemIndex

WHERE CONTAINS(@SearchWord)

この抜粋は、CONTAINS に関する TechNet からのものです。TechNetを参照してください。

*contains_search_condition* は nvarchar です。別の文字データ型が入力として使用されると、暗黙的な変換が発生します。次の例では、varchar(30) として定義されている @SearchWord 変数によって、CONTAINS 述部で暗黙的な変換が行われます。

于 2013-11-04T22:18:41.457 に答える