Postgresql Postgres全文搜索忽略url

Postgresql Postgres全文搜索忽略url,postgresql,indexing,full-text-search,postgresql-9.4,Postgresql,Indexing,Full Text Search,Postgresql 9.4,我正在尝试使用PostgreSQL实现全文搜索系统 我遇到了这个奇怪的或可能是有意的特点 当尝试索引或搜索包含扩展名为(例如myimage.jpg)的文件名的列时,系统将其视为url,并且不会正确标记 我参考了文档,并通过ts_debug看到文件名作为url的主机 有人能告诉我如何在PostgreSQL的FTS中将所有输入作为普通单词 另外,在第二个请求中,如何使用它执行包含,开始,以及结束搜索 更新 我现在尝试了语句create text search configuration…,从pg_c

我正在尝试使用PostgreSQL实现全文搜索系统

我遇到了这个奇怪的或可能是有意的特点

当尝试索引或搜索包含扩展名为(例如myimage.jpg)的文件名的列时,系统将其视为url,并且不会正确标记

我参考了文档,并通过
ts_debug
看到文件名作为
url
的主机

有人能告诉我如何在
PostgreSQL
FTS
中将所有输入作为普通单词

另外,在第二个请求中,如何使用它执行
包含
开始
,以及
结束
搜索

更新

我现在尝试了语句
create text search configuration…
,从
pg_catalog.english
复制,并删除了
host
url
url_path
,然后为
ts_debug
方法指定了配置。但是仍然不行。
myimage.jpg
仍然被标识为
host

版本
我使用9.4版tl;如果你真的只想要单词(而不是电子邮件、URL、主机等),dr会对你的输入进行预解析并删除标点符号

因此,在我自己尝试解决这个问题之后,问题是您似乎无法轻松地定制解析器。据我所知,解析器首先运行,它生成令牌。然后将这些标记与词典匹配

通过从配置中删除
host
url
url\u path
,您要做的就是使这些标记不会在字典中查找,从而导致这些标记没有词素。这本质上意味着它们在搜索方面并不存在。这不是你想要的

理想情况下,您需要做的是自定义解析器,使其不首先生成那些标记,或者也生成重叠标记(类似于连字号为整个单词以及单个组件生成标记的方式)。如果不编写自定义解析器,目前似乎不可能做到这一点

唯一的解决方案是预解析文本以删除句号。请注意,如果您依赖其他类型的令牌,如版本(例如
8.3.0
)或电子邮件(例如
name@domain.com
)这将破坏这些。因此,在如何删除字符方面,您可能需要稍微聪明一点

select ts_debug('english', replace('this-is-a-file.jpg', '.', ' '));

"(asciihword,"Hyphenated word, all ASCII",this-is-a-file,{english_stem},english_stem,{this-is-a-fil})"
"(hword_asciipart,"Hyphenated word part, all ASCII",this,{english_stem},english_stem,{})"
"(blank,"Space symbols",-,{},,)"
"(hword_asciipart,"Hyphenated word part, all ASCII",is,{english_stem},english_stem,{})"
"(blank,"Space symbols",-,{},,)"
"(hword_asciipart,"Hyphenated word part, all ASCII",a,{english_stem},english_stem,{})"
"(blank,"Space symbols",-,{},,)"
"(hword_asciipart,"Hyphenated word part, all ASCII",file,{english_stem},english_stem,{file})"
"(blank,"Space symbols"," ",{},,)"
"(asciiword,"Word, all ASCII",jpg,{english_stem},english_stem,{jpg})"
关于你的第二个问题。你是说部分单词匹配吗?当使用像
english
这样的配置时,可以通过词干处理得到一点,所以
running
变成
run
,如果搜索
run
running
,就会匹配。如果你说的是模糊匹配,它会变得更复杂。我建议读这篇文章