代码之家  ›  专栏  ›  技术社区  ›  Giox

PostgreSQL全文搜索失败

  •  0
  • Giox  · 技术社区  · 2 年前

    我有一个PostgreSQL用来索引文本内容。 SearchVector列是使用以下代码成功创建的

    UPDATE public."DocumentFiles"
    SET "SearchVector" = setweight(to_tsvector('pg_catalog.italian', coalesce("DocumentFileName", '')), 'A') 
       || setweight(to_tsvector('pg_catalog.italian', coalesce("DocumentFileDescription", '')), 'B') 
       || setweight(to_tsvector('pg_catalog.italian', coalesce("DocumentFileContentString", '')), 'B')
    WHERE "DocumentFileID" = 123;
    

    内容如下所示:

    '011989':1A '5':7A 'cdp':2A 'contonu':10A 'elettr':6A 'grupp':8A 'impiant':5A 'manual':3A 'uso':4A
    

    但是,如果我尝试运行查询以获得的复数或单数 手册 (意大利语: 麦奴 是一个, 马努阿里 为2或更多),则失败:

    SELECT "DocumentFileID"
    FROM public."DocumentFiles"
    where "SearchVector"::tsvector @@ 'manuali'::tsquery;
    

    不返回任何内容

    SELECT "DocumentFileID"
    FROM public."DocumentFiles"
    where "SearchVector"::tsvector @@ 'manuale'::tsquery;
    

    不返回任何内容

    只有当我在searchvector字段中准确写入内容时,它才会返回记录:

    SELECT "DocumentFileID"
    FROM public."DocumentFiles"
    where "SearchVector"::tsvector @@ 'manual'::tsquery;
    

    它怎么了?

    0 回复  |  直到 2 年前
        1
  •  1
  •   Laurenz Albe    2 年前

    问题可能是参数 default_text_search_configuration 未设置为 italian ,从而使用不同的词干算法。

    明确并使用 to_tsquery('italian', 'manuali') 而不是 'manuali'::tsquery