【问题标题】:Postgres full text search ignore urlPostgres全文搜索忽略url
【发布时间】:2016-05-25 22:37:27
【问题描述】:

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

我遇到了这个奇怪的或可能是预期的功能。

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

我参考了文档并通过ts_debug 看到文件名被视为url 的主机。

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

另外,在第二个请求中,如何使用它进行 containsstartswithendswith 搜索?

更新

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

版本 我使用的是 9.4 版

【问题讨论】:

    标签: postgresql indexing full-text-search postgresql-9.4


    【解决方案1】:

    tl;dr 如果您真的只想要单词(而不是电子邮件、网址、主机等),请查看预先解析您的输入并删除标点符号。

    所以在我自己尝试解决这个问题后,问题是您似乎无法轻松自定义解析器。据我了解,解析器首先运行,它生成令牌。然后将这些标记与字典进行匹配。

    通过从配置中删除hosturlurl_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,如果你搜索runrunning,它将匹配。如果你在谈论模糊匹配,它会变得有点复杂。我建议阅读这篇文章http://rachbelaid.com/postgres-full-text-search-is-good-enough/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2018-02-03
      相关资源
      最近更新 更多