Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用oracle文本索引从json中提取数据_Json_Oracle - Fatal编程技术网

如何使用oracle文本索引从json中提取数据

如何使用oracle文本索引从json中提取数据,json,oracle,Json,Oracle,我有一个表,它有一个Oracle文本索引。我创建索引是因为我需要一个额外的快速搜索。该表包含JSON数据。Oracle json_textcontains的工作非常糟糕,所以我尝试使用CONTAINS(如果我们查看查询计划,json_textcontains实际上会被重写为CONTAINS) 我想通过给定的class_类型和id值查找所有JSON,但Oracle查看了所有JSON,但没有查看class_类型和id应该在一个JSON部分,即它处理JSON不像结构化数据,而是像一个巨大的字符串 格式

我有一个表,它有一个Oracle文本索引。我创建索引是因为我需要一个额外的快速搜索。该表包含JSON数据。Oracle json_textcontains的工作非常糟糕,所以我尝试使用CONTAINS(如果我们查看查询计划,json_textcontains实际上会被重写为CONTAINS)

我想通过给定的class_类型和id值查找所有JSON,但Oracle查看了所有JSON,但没有查看class_类型和id应该在一个JSON部分,即它处理JSON不像结构化数据,而是像一个巨大的字符串

格式良好的JSON如下所示:

{
     "class":[
              {
               "class_type":"ownership",
               "values":[{"nm":"id","value":"1"}]
              },
              {
               "class_type":"country",
               "values":[{"nm":"id","value":"640"}]
              },
              ,
              {
               "class_type":"features",
               "values":[{"nm":"id","value":"15"},{"nm":"id","value":"20"}]
              }
             ]
    }    
{
     "class":[
              {
               "class_type":"ownership",
               "values":[{"nm":"id","value":"18"}]
              },
              {
               "class_type":"country",
               "values":[{"nm":"id","value":"11"}]
              },
              ,
              {
               "class_type":"features",
               "values":[{"nm":"id","value":"7"},{"nm":"id","value":"640"}]
              }
             ]
    }
第二个不应该被找到的是这样的:

{
     "class":[
              {
               "class_type":"ownership",
               "values":[{"nm":"id","value":"1"}]
              },
              {
               "class_type":"country",
               "values":[{"nm":"id","value":"640"}]
              },
              ,
              {
               "class_type":"features",
               "values":[{"nm":"id","value":"15"},{"nm":"id","value":"20"}]
              }
             ]
    }    
{
     "class":[
              {
               "class_type":"ownership",
               "values":[{"nm":"id","value":"18"}]
              },
              {
               "class_type":"country",
               "values":[{"nm":"id","value":"11"}]
              },
              ,
              {
               "class_type":"features",
               "values":[{"nm":"id","value":"7"},{"nm":"id","value":"640"}]
              }
             ]
    }
请查看如何重现我试图实现的目标:

create table perso.json_data(id number, data_val blob);

insert into perso.json_data 

values(
1,
utl_raw.cast_to_raw('{"class":[{"class_type":"ownership","values":[{"nm":"id","value":"1"}]},{"class_type":"country","values":[{"nm":"id","value":"640"}]},{"class_type":"features","values":[{"nm":"id","value":"15"},{"nm":"id","value":"20"}]}]}')
);


insert into perso.json_data values(
2,
utl_raw.cast_to_raw('{"class":[{"class_type":"ownership","values":[{"nm":"id","value":"18"}]},{"class_type":"country","values":[{"nm":"id","value":"11"}]},{"class_type":"features","values":[{"nm":"id","value":"7"},{"nm":"id","value":"640"}]}]}')
)
;

commit;


ALTER TABLE perso.json_data
ADD CONSTRAINT check_is_json
 CHECK (data_val IS JSON (STRICT));

 CREATE INDEX perso.json_data_idx ON json_data (data_val)
 INDEXTYPE IS CTXSYS.CONTEXT
 PARAMETERS ('section group CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)');


select *
from perso.json_data

where ctxsys.contains(data_val, '(640 INPATH(/class/values/value)) and (country inpath (/class/class_type))')>0    
查询返回2行,但我希望只得到id=1的记录

如何在不使用JSON_表的情况下使用全文索引进行搜索而不出现我突出显示的错误

没有以关系格式放置数据的选项


提前感谢。

请不要直接使用文本索引来解决此类问题。这不是它的设计目的

在12.2.0.1.0中,这应该适用于您(是的,它确实在封面下使用了专门版本的文本索引,但它也应用了选择性的后期过滤,以确保结果是正确的)