PostgreSQL:如何实现GIN?

时间:2013-07-05 13:09:15

标签: c postgresql indexing

我想将我的文本哈希函数带入GIN索引器。

请参阅下面的扩展性:

http://www.postgresql.org/docs/9.0/static/gin-extensibility.html

我可以理解比较

int compare(Datum a, Datum b)

然而 extractValue extractQuery 一致怎么样。

Datum *extractValue(Datum inputValue, int32 *nkeys)

Datum *extractQuery(Datum query, int32 *nkeys, StrategyNumber n, bool **pmatch, Pointer **extra_data)

bool consistent(bool check[], StrategyNumber n, Datum query, int32 nkeys, Pointer extra_data[], bool *recheck)

本手册无法帮助我实施它们。

我知道如何实施它们。详细说明:

  • 传递给 extractValue inputValue 的内容是什么?
  • extractValue 返回的内容?
  • 传递给 extractQuery 查询的内容是什么?
  • extractQuery 返回了什么?
  • 传递给一致 查询的内容是什么?
  • 传递给检查 一致的内容是什么?

索引存储(散列键)将为 int4 。输入类型为文字

1 个答案:

答案 0 :(得分:1)

您是否阅读了所有文档?你知道逆指数的作用吗?我无法完全回答您的问题,因为您尚未指定查询的内容。但这是一次尝试(基于http://www.postgresql.org/docs/9.2/static/gin-extensibility.htmlhttp://www.sai.msu.su/~megera/wiki/Gin的信息)。另外,请查看tsearch示例。

compare的输入是两个键值,因此是两个整数。

extractValue的输入是您的输入类型,文本。输出是一个键数组:在你的情况下显然是一个整数数组。

extractQuery获取您的查询类型的输入,该查询类型可能是一个字符串(您没有指定),并返回您希望系统找到匹配项的有趣键列表。它还可以返回consistant方法的额外信息。

根据您从extractQuery返回的内容,系统找到有趣的值后,此方法将返回该值是否与查询实际匹配。

由于您尚未指定查询类型,因此我将举例说明全文搜索。 例如,查询类型是一个类似'foo和bar'的字符串,这将返回键'foo'和'bar'以及一些数据,因此consistant函数知道两个术语必须存在。

但实际上,这些都在上面的页面中描述过。