我可以在postgres ts_vector / ts_query全文搜索中禁用字典吗?

时间:2016-06-28 10:45:05

标签: postgresql full-text-search postgresql-9.1

我需要对机器语言进行文本搜索。如果我使用任何可用的文本搜索dictonaries,ts_vectors就会搞乱。

  

离。移动 - >变成了mov,我的搜索失败了。

任何想法如何索引非语言词?

谢谢!

1 个答案:

答案 0 :(得分:3)

您是否尝试过使用空的停用词文件的simple字典?

创建一个空的停用词文件$(pg_config --sharedir)/tsearch_data/empty.stop并运行:

CREATE TEXT SEARCH DICTIONARY machine (
   TEMPLATE = pg_catalog.simple,
   STOPWORDS = empty
);

CREATE TEXT SEARCH CONFIGURATION machine (
   PARSER = default
);

ALTER TEXT SEARCH CONFIGURATION machine
   ADD MAPPING FOR asciiword, word, numword, asciihword, hword,
                   numhword, hword_asciipart, hword_part,
                   hword_numpart, email, protocol, url, host,
                   url_path, file, sfloat, float, int, uint,
                   version, tag, entity, blank
   WITH machine;

然后你可以得到:

test=> SELECT * FROM ts_debug('machine', 'move');
   alias   |   description   | token | dictionaries | dictionary | lexemes
-----------+-----------------+-------+--------------+------------+---------
 asciiword | Word, all ASCII | move  | {machine}    | machine    | {move}
(1 row)

如果您希望默认使用此配置(因此您不必一直指定'machine'),请相应地更改参数default_text_search_config