PostgreSQL tsvector配置:如何允许特殊字符?

13

我在PostgreSQL中设置了一个新的文本搜索配置。该配置使用空的停用词文件、DictFile和AffFile。

进行了一个简单的测试...

SELECT * 
  FROM ts_debug('public.myconfig', 'C++ and C# and PHP');

...目前运行(几乎)正常,除了'C++'和'C#'的词元都是'C'这一事实。基本上,我想做的就是确保'C++'的词元为'C++',而'C#'的词元为'C#',从而使用户可以查询'C++'。

1个回答

5
问题有两个。
  1. 第一个问题是索引。默认配置使用词干提取对数据进行索引,因此您会得到' C++ '和' C#'的词元'C'。您可以使用'simple'配置来索引数据,但是这样会在索引中产生不需要的单词。我将'C++'转换为'Cplusplus'并进行了索引。由于'Cplusplus'没有词元,因此它将按原样进行索引。您可以通过将其在索引数据中设置为'CSharp'来对'C#'执行相同的操作。

  2. 第二个问题是搜索。现在已经解决了索引数据的问题,我们需要确保在搜索特殊单词时将搜索术语进行转换。如果用户输入“C ++”,则需要在执行搜索之前将其转换为“Cplusplus”。

我在DB上创建了一个函数,该函数接受一个字符串并转换所有特殊术语的所有出现。

我已经有一段时间没有使用TSearch了,所以我不确定TSearch是否允许您设置与停用词相同的异常列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接