Postgres 全文忽略 xml 标签
Postgres fulltext ignores xml tags
我正在开发使用户能够在源存储库中进行搜索的网络应用程序。
该程序解析差异。
我找不到将差异的所有部分注入 Postgres 的全文向量的方法。
示例:
select alias, description, token from ts_debug('Link to <a href="//www.yahoo.com">Yahoo!</a> web site');
+-----------+-----------------+----------------------------+
| alias | description | token |
+-----------+-----------------+----------------------------+
| asciiword | Word, all ASCII | Link |
| blank | Space symbols | |
| asciiword | Word, all ASCII | to |
| blank | Space symbols | |
| tag | XML tag | <a href="//www.yahoo.com"> |
| asciiword | Word, all ASCII | Yahoo |
| blank | Space symbols | ! |
| tag | XML tag | </a> |
| blank | Space symbols | |
| asciiword | Word, all ASCII | web |
| blank | Space symbols | |
| asciiword | Word, all ASCII | site |
+-----------+-----------------+----------------------------+
好像解析没问题。但是,如果我将其转换为文档向量,则不会包含 XML 标签。
select to_tsvector('simple', 'Link to <a href="//www.yahoo.com">Yahoo!</a> web site') to_tsvector;
+--------------------------------------------+
| to_tsvector |
+--------------------------------------------+
| 'link':1 'site':5 'to':2 'web':4 'yahoo':3 |
+--------------------------------------------+
估计跟配置有关?
有什么想法吗?
解析器解析出标签,但默认配置 'simple' 会忽略它们(如 运行 \dF+ simple
在 psql 中所见,未列出的标记将被忽略)。
你可以告诉它不要忽略它们:
alter text search configuration simple add mapping for tag with simple;
但您最好复制配置,然后修改副本。
您可能还需要自定义词典来处理标签,因为 'simple' 词典不太可能满足您的要求。
select to_tsvector('simple', 'Link to <a href="//www.yahoo.com">Yahoo!</a> web site') to_tsvector;
to_tsvector
------------------------------------------------------------------------------------
'</a>':5 '<a href="//www.yahoo.com">':3 'link':1 'site':7 'to':2 'web':6 'yahoo':4
我正在开发使用户能够在源存储库中进行搜索的网络应用程序。 该程序解析差异。 我找不到将差异的所有部分注入 Postgres 的全文向量的方法。
示例:
select alias, description, token from ts_debug('Link to <a href="//www.yahoo.com">Yahoo!</a> web site');
+-----------+-----------------+----------------------------+
| alias | description | token |
+-----------+-----------------+----------------------------+
| asciiword | Word, all ASCII | Link |
| blank | Space symbols | |
| asciiword | Word, all ASCII | to |
| blank | Space symbols | |
| tag | XML tag | <a href="//www.yahoo.com"> |
| asciiword | Word, all ASCII | Yahoo |
| blank | Space symbols | ! |
| tag | XML tag | </a> |
| blank | Space symbols | |
| asciiword | Word, all ASCII | web |
| blank | Space symbols | |
| asciiword | Word, all ASCII | site |
+-----------+-----------------+----------------------------+
好像解析没问题。但是,如果我将其转换为文档向量,则不会包含 XML 标签。
select to_tsvector('simple', 'Link to <a href="//www.yahoo.com">Yahoo!</a> web site') to_tsvector;
+--------------------------------------------+
| to_tsvector |
+--------------------------------------------+
| 'link':1 'site':5 'to':2 'web':4 'yahoo':3 |
+--------------------------------------------+
估计跟配置有关?
有什么想法吗?
解析器解析出标签,但默认配置 'simple' 会忽略它们(如 运行 \dF+ simple
在 psql 中所见,未列出的标记将被忽略)。
你可以告诉它不要忽略它们:
alter text search configuration simple add mapping for tag with simple;
但您最好复制配置,然后修改副本。
您可能还需要自定义词典来处理标签,因为 'simple' 词典不太可能满足您的要求。
select to_tsvector('simple', 'Link to <a href="//www.yahoo.com">Yahoo!</a> web site') to_tsvector;
to_tsvector
------------------------------------------------------------------------------------
'</a>':5 '<a href="//www.yahoo.com">':3 'link':1 'site':7 'to':2 'web':6 'yahoo':4