簡體   English   中英

使用pg_search gem for substring在軌道上進行PG全文搜索

[英]PG full text search on rails using pg_search gem for substring

我正在使用Pg全文搜索我的搜索。 由於我在rails上使用Ruby,我使用的是pg_search gem。 我如何配置它以給出子串的命中。

pg_search_scope :search_by_detail, 
              :against => [
                   [:first_name,'A'],
                   [:last_name,'B'],
                   [:email,'C']
              ],                  
              :using => {
                :tsearch => {:prefix => true}
              }

現在,如果子串在開始時它給出一個命中,但如果中間的子串,它不會給出命中

示例它為sdate@example.com命中,但不是example.com

我是pg_search的作者和維護者。

不幸的是,默認情況下PostgreSQL的tsearch不會拆分電子郵件地址,並允許您匹配部分。 如果你打開它可能會有效:trigram但是, :trigram搜索,因為它匹配出現在可搜索文本中任意位置的任意子字符串。

pg_search_scope :search_by_detail,
                :against => [
                  [:first_name,'A'],
                  [:last_name,'B'],
                  [:email,'C']
                ],
                :using => {
                  :tsearch => {:prefix => true},
                  :trigram => {}
                }

我通過在psql中運行以下命令來確認這一點:

grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', 'name@example.com');
 ?column? 
----------
 f
(1 row)

我知道解析器確實檢測到了電子郵件地址,所以我認為它必須是可能的。 但它將涉及在PostgreSQL中構建一個文本搜索字典 ,將電子郵件地址正確地拆分為令牌。

以下是文本搜索解析器知道它是電子郵件地址的證據:

grant=# SELECT ts_debug('english', 'name@example.com');
                                  ts_debug                                   
-----------------------------------------------------------------------------
 (email,"Email address",name@example.com,{simple},simple,{name@example.com})
(1 row)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM