我会发表评论,但我还没有足够的声誉。
我一直在研究pg_search
这使我更深入地了解 PostgreSQL 全文搜索。这是一个复杂的模块,但它有 ts_debug() 命令来帮助理解如何解析输入字符串。测试字符串“C++ CSS C# Objective C”的 ts_debug() 输出非常有启发性。看起来 "# 和 "+" 在英语的默认配置中被视为空格。我认为您可能必须修改 PostgreSQL 中的解析器才能获得所需的行为。
postgres=# SELECT * FROM ts_debug('english', 'C++ CSS C# Objective C');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-----------+----------------+--------------+----------
asciiword | Word, all ASCII | C | {english_stem} | english_stem | {c}
blank | Space symbols | + | {} | |
blank | Space symbols | + | {} | |
asciiword | Word, all ASCII | CSS | {english_stem} | english_stem | {css}
blank | Space symbols | | {} | |
asciiword | Word, all ASCII | C | {english_stem} | english_stem | {c}
blank | Space symbols | # | {} | |
asciiword | Word, all ASCII | Objective | {english_stem} | english_stem | {object}
blank | Space symbols | | {} | |
asciiword | Word, all ASCII | C | {english_stem} | english_stem | {c}
(10 rows)
顺便说一句,如果你想学习 PostgreSQL 全文搜索,这里有一个非常有用的教程:http: //shisaa.jp/postset/postgresql-full-text-search-part-1.html
更新:
我在 PostgreSQL 全文搜索中找到了一个解决方案。它涉及使用test_parser
此处记录的扩展:http ://www.postgresql.org/docs/9.1/static/test-parser.html
首先需要一些配置psql
:
postgres=# CREATE EXTENSION test_parser;
postgres=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
postgres=# ALTER TEXT SEARCH CONFIGURATION testcfg
ADD MAPPING FOR word WITH english_stem;
现在您可以索引一个测试字符串,并根据需要将“C++”之类的术语视为单独的标记:
postgres=# SELECT to_tsvector('testcfg', 'C++ CSS C# Objective C #GT40 GT40 added joined');
to_tsvector
----------------------------------------------------------------------------
'#gt40':6 'ad':8 'c':5 'c#':3 'c++':1 'css':2 'gt40':7 'join':9 'object':4
(1 row)
问题仍然是如何将其集成到pg_search
. 我正在看下一个。