2

vbscript から ASP.NET MVC にアップグレードするプロジェクトに参加しています。Microsoft Index Server を使用して、Windows Server 2003 マシン上の Word および PDF ファイルのインデックスを作成しました。「Provider=\"MSIDXS\";Data Source=\"docSearch\";」のような接続文字列を使用して、OleDbConnection を開いただけです。

少し調べたところ、Index Server は廃止されていることがわかりました ("Note Indexing Service is obsolete as of of Windows XP.その代わりに、Windows Search を使用してください。" - http://msdn.microsoft.com/en-us/library/ms690580 ) 。 Windows Search は後継です。
したがって、私の新しい MVC アプリでは、「Provider=Search.Collat​​orDSO;Extended Properties=\"Application=Windows\"」のような接続文字列で OleDbConnection を使用して接続しようとしています。

書式設定されたクエリを取り込んで検索を実行するメソッドがあります。OleDb を使用して実行されるクエリは次のとおりです。

string.Format("SELECT System.FileName FROM SystemIndex WHERE CONTAINS('{0}')", query)

これで、テスト クラスでメソッドを呼び出すと、正常に動作します (つまり、結果が返されます... myDataReader.HasRows は true です)。しかし、MVC コントローラーから同じメソッドを呼び出すと、同じクエリを使用して結果が返されません - myDataReader.HasRows は false です。私の推測では、アクセス許可と IIS がインデックスにアクセスできないことが関係しています。IIS がインデックスにアクセスできるようにするにはどうすればよいですか? インデックスを ASP.NET Web ページに公開するにはどうすればよいですか? Index Server が廃止され、この機能が Windows Search でサポートされていない場合、何を使用すればよいですか?

4

2 に答える 2

2

Indexing Serviceに特定の問題があるか、新しいバージョンの機能が必要でない限り、サポートされていないという理由だけで変更することはありません。

から接続文字列を取得しますISearchQueryHelper

サービスには正しいアクセス許可がありますか? Windows Search 3.0/4.0 SDKを確認しましたか?

フォーラムに参加しているようです ( http://social.msdn.microsoft.com/Forums/en-US/windowsdesktopsearchdevelopment/thread/7b9eead4-d938-42c6-ba2b-2c238a7706f9 )

Windows SearchがWeb サイトのIndexing Serviceに本当に取って代わることができるかどうかはわかりません。たとえば、ローカル システム上のすべてを含む「SystemIndex」というインデックスは 1 つしかありません。では、結果を Web サイトだけに限定するにはどうすればよいでしょうか。

私は経験のない「エンタープライズ検索」または「検索サーバー」を使用する必要があると思います。

Indexing ServiceWindows Searchの両方の結果はADO.NETであるため、表示はあまり変わりません。API はかなり異なっているため、多くの変更を加える必要があります。たとえば、Windows Searchには「スコープ」はありません。個人の「デスクトップ検索」アプリケーションを変更したとき、変更に 1 時間かかりましたが、API の変更により、Indexing Serviceで使用していたすべての機能を複製するのに 2 日かかりました。「コード ライブラリ」でコード スニペットを検索する場合、 Windows Searchの方が優れているため、この変更を行いました。

正規表現、ワイルドカード、または非標準のプロパティを使用しない標準クエリの場合、どちらも同じように実行されます。Indexing Serviceは常にデータをすばやく取得しますが、「コストが高すぎる」一部のクエリを実行しない場合があります。Windows Searchは、クエリによってはデータの取得に時間がかかる場合があります。通常、これらの「長いクエリ」はIndexing Serviceの「コストが高すぎる」クエリです。「長いクエリ」は、インデックスに含まれていないプロパティを取得するクエリからも発生する可能性があります。

Windows Server 2003で自分の Web サイトにIndexing Serviceをまだ使用していますが、変更を加える予定はありません。これは、予想したほど簡単ではなく、やむを得ない理由もないためです。

于 2010-07-12T00:35:48.097 に答える
1

ここで私の答えを見つけましたASP.NET OLEDB コードは、IIS7 にデプロイされたときに壊れます。インデックスにアクセスできるユーザーになりすます。

于 2010-07-12T02:17:20.210 に答える