2017-05-07 79 views
1

我需要SOME_NUMERIC_PARAM文本字段排序大表:如何在索引组织表上构建Oracle文本索引?

CREATE TABLE HR.IOT_TEST 
(
    ID VARCHAR2(30 CHAR), 
    SOME_NUMERIC_PARAM NUMBER, 
    TEXTS CLOB, 
    CONSTRAINT PK_IOT PRIMARY KEY (ID, SOME_NUMERIC_PARAM) ENABLE 
) 
ORGANIZATION INDEX; 

我想建立对CLOB文本搜索索引:

CREATE INDEX IOT_TEST_IND ON HR.IOT_TEST 
(
    TEXTS 
) 
INDEXTYPE IS CTXSYS.CONTEXT; 

但我得到这个错误:

Table HR.IOT_TEST created. 

SQL Error: ORA-29958: fatal error occurred in the execution of ODCIINDEXCREATE routine 
ORA-29960: line 1, 
DRG-11303: secondary indexes are not supported by this indextype 

我错过了什么?我如何使用Oracle Text和索引组织表?

回答

2

"How can I use Oracle Text and Index Organized Table"

你不能。索引组织的表基本上只是一个索引(有一个表对象,但它是存根)。我们不能在索引上创建索引,这只是数据库体系结构的限制。

但你为什么要这样做呢?与organization index搭建此表没有任何价值。物联网的使用情况有限;主要它们对于参考数据查找(通常具有键 - 结构结构)是非常有用的:我们总是用键查找描述,没有其他访问路径,我们通常使用SQL中的两列。

带有CLOB的任何索引似乎都不适合该类用例。您要独立搜索文本的事实证实了这一点。您需要为您的CLOB构建常规堆表。然后你可以建立一个文本索引。

我猜你想要结合全文搜索与其他过滤器。如果是这样,你应该检查出CTXCAT索引类型。这是一种不同类型的文本索引,它允许我们构建常规列和启用了自由文本搜索的列的复合索引。所以,你可以运行一个查询,查找包含单词“自行车”,其中的数值比一些像这样的值的文本值:

select from hr.txt_test 
where CATSEARCH(texts, 'bicycle', 'some_numeric_param > 23')> 0; 

CTXCAT指数的另一个优点是,他们是事务性的,因此我们不必维护他们的后台工作。主要缺点是它们不适合大块的文本。所以也许他们不适合你的情况。 Find out more


"I need a large table ordered by SOME_NUMERIC_PARAM with text field "

我想你排除了分区(因为牌的?)。当你在12c上时,Attribute Clustering可能会帮助你。这是“是基于某些列的内容将数据紧密物理接近的表级指令”(from the docs)。但是,只有在通过直接路径插入操作,数据移动或表创建填充表时,属性聚类才起作用:正常的DML语句不适用它。


" Again kinda ebay style where people start with something very common like samsung and have few sorting options "

所以关于像eBay,谷歌和可扩展性等诸多图腾网站的事情是,他们在高速缓存,索引和专用数据结构的投入大量的心血。在很多方面,它们就像数据仓库一样,数据结构非常规范化。因此,很多eBay搜索不是从项目描述的全文搜索中过滤结果,而是通过对维度结构进行过滤和匹配:最初甚至不是数据库表,而是内存缓存。

常见的搜索模式是高速缓存和呈现为下拉式建议。他们甚至以这种方式处理拼写错误。在eBay搜索框中输入smasu,您会得到相同的建议搜索,就好像您输入了samsu即当前所需的三星手机(而不是手提电脑或冰箱)的列表。这是定制的。开箱即用Oracle Text无法实现这一功能。

所以它回来了,你真的想成为多少像eBay?使用这样的站点来简化功能非常简单,但实现等效功能的任务却不同。

+0

谢谢。是的,我想将全文搜索与过滤器值进行过滤和排序。类似ebay。目前,我们正在利用我们加入几桌几预排序mviews并增加了一些计算出的数值。我在想IOT可能会取代mviews。不确定分区tbh。我们的文本字段都是围绕4K字符,不知道这是否是适合CTXCAT。我们正在向用户显示由数百万组成的预订数据的第一行。再次,有点易趣的风格,人们从像“三星”这样非常普通的东西开始,并且有很少的分类选项 – Toolkit