1

我使用“德语”创建了 Postgresql 全文搜索。我如何配置,当我搜索“Bezirk”时,包含“Bez”的行。也有比赛?(反之亦然)

4

3 回答 3

3

@pozs 是对的。您需要使用同义词词典

1 - 在目录 $SHAREDIR/tsearch_data 中创建具有以下内容的文件 German.syn:

Bez Bezirk

2 - 执行查询:

CREATE TEXT SEARCH DICTIONARY german_syn (
    template = synonym,
    synonyms = german);
CREATE TEXT SEARCH CONFIGURATION german_syn(COPY='simple');
ALTER TEXT SEARCH CONFIGURATION german_syn
    ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,
        word, hword, hword_part
    WITH german_syn, german_stem;

现在你可以测试它了。执行查询:

test=# SELECT to_tsvector('german_syn', 'Bezirk') @@ to_tsquery('german_syn', 'Bezirk & Bez');
 ?column? 
----------
 t
(1 row)

test=# SELECT to_tsvector('german_syn', 'Bez Bez.') @@ to_tsquery('german_syn', 'Bezirk');
 ?column? 
----------
 t
(1 row)

附加链接:

  1. PostgreSQL:全文搜索引擎(已过期)
于 2016-03-16T14:16:39.170 回答
0

尝试在搜索中使用通配符。

例如:

tableName.column LIKE 'Bez%'

%搜索后面的任何字母或数字Bez

于 2016-03-04T21:35:55.743 回答
0

描述非常模糊,无法理解您要实现的目标,但看起来您在寻找缩写词时需要简单的模式匹配搜索(因此需要像在全文搜索中那样进行词干提取)。我会pg_trgm为此目的:

WITH t(word) AS ( VALUES
  ('Bez'),
  ('Bezi'),
  ('Bezir')
)
SELECT word, similarity(word, 'Bezirk') AS similarity
FROM t
WHERE word % 'Bezirk'
ORDER BY similarity DESC;

结果:

 word  | similarity 
-------+------------
 Bezir |      0.625
 Bezi  |        0.5
 Bez   |      0.375
(3 rows)
于 2016-03-04T21:48:09.187 回答