Keyword Analyzer ベースの Lucene.NET インデックスを SQL Server 2008 R2 ベースのインデックスに置き換えようとしています。
クエリを実行する必要があるカスタム インデックス フィールドを含むテーブルがあります。インデックス列の値 (以下を参照) は、一連の .NET タイプからのカスタム インデックス フィールドの名前と値のペアの組み合わせです。構造が不明なため、実際の値は実行時に属性から取得されます。
AND と OR を使用してセット名と値のペアを検索し、クエリが一致する行を返すことができる必要があります。
Id Index
====================================================================
1 [Descriptor.Type]=[5][Descriptor.Url]=[/]
2 [Descriptor.Type]=[23][Descriptor.Url]=[/test]
3 [Descriptor.Type]=[25][Descriptor.Alternative]=[hello]
4 [Descriptor.Type]=[26][Descriptor.Alternative]=[hello][Descriptor.FriendlyName]=[this is a test]
簡単なクエリは次のようになります。
select * from Indices where contains ([Index], '[Descriptor.Url]=[/]');
そのクエリは、次のエラーになります。
Msg 7630, Level 15, State 2, Line 1
Syntax error near '[' in the full-text search condition '[Descriptor.Url]=[/]'.
そのことを念頭に置いて、Index
列のデータをand|
の代わりに使用するように変更しました。[
]
select * from Indices where contains ([Index], '|Descriptor.Url|=|/|');
現在、そのクエリは有効ですが、実行すると、完全に一致するレコード (この場合は正確に 1 つ) ではなく、次を含むすべての行が返されますDescriptor.Url
。/
私の質問は、クエリをエスケープして[
andを考慮し、正確に一致する行]
だけが返されるようにするにはどうすればよいですか?
より複雑なクエリは次のようになります。
select * from Indices where contains ([Index], '[Descriptor.Type]=[12] AND ([Descriptor.Url]=[/] OR [Descriptor.Url]=[/test])');
ありがとう、
キーロン