6

radio/tested次のようなクエリでヒットを返したいなどのシーケンスを含むドキュメントがいくつかあります。

select * from doc
where to_tsvector('english',body) @@ to_tsvector('english','radio')

残念ながら、デフォルトのパーサーは(Windows環境にあるにもかかわらず)トークンradio/testedとしてfile受け取るため、上記のクエリとは一致しません。それを実行ts_debugすると、ファイルとして認識されていることがわかり、語彙素がradio/tested2つの語彙素とではなく語彙素になっradioてしまいtestます。

fileトークンを検索しないようにパーサーを構成する方法はありますか?私は試した

ALTER TEXT SEARCH CONFIGURATION public.english
    DROP MAPPING FOR file;

...しかし、の出力は変更されませんでしたts_debug。無効にする方法がある場合file、または少なくともfile途中でディレクトリ名を構成すると思われるすべての単語を認識させる方法がある場合、またはスラッシュをハイフンまたはスペースとして処理する方法がある場合(パフォーマンスに影響を与えることなく)自分でそれらをregexp_replaceすることの)それは本当に役に立ちます。

4

1 に答える 1

5

私はあなたが望むことをする唯一の方法はあなた自身のパーサーを作成することだと思います:-(wparser_def.cを新しいファイルにコピーし、解析テーブル(actionTPS_Baseおよびそれに続くもの)からファイルに関連するエントリを削除します(TPS_InFileFirstなどTPS_InFileNext) 、設定する必要があります。主な問題は、モジュールをPostgreSQLのCイディオム(など)に準拠させることだと思います。例をPG_FUNCTION_INFO_V1見てください。contrib/test_parser/

于 2010-01-04T05:12:03.783 に答える