基于AQL和python的arangodb全文检索

2024-04-25 13:58:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我以以下格式将数据存储在arangodb中:

{"data": [
{
  "content": "maindb",
  "type": "string",
  "name": "db_name",
  "key": "1745085839"
},
{
  "type": "id",
  "name": "rel",
  "content": "1745085840",
  "key": "1745085839"
},
{
  "content": "user",
  "type": "string",
  "name": "rel_name",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584001",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584002",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584003",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584004",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584005",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584006",
  "key": "1745085840"
},
{
  "type": "id",
  "name": "tuple",
  "content": "174508584007",
  "key": "1745085840"
},
{
  "content": "dspclient",
  "type": "varchar",
  "name": "username",
  "key": "174508584001"
},
{
  "content": "12345",
  "type": "varchar",
  "name": "password",
  "key": "174508584001"
},
{
  "content": "12345",
  "type": "varchar",
  "name": "cpassword",
  "key": "174508584001"
},
{
  "content": "n",
  "type": "varchar",
  "name": "PostgreSQL",
  "key": "174508584001"
},
{
  "content": "n",
  "name": "IBMDB2",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "n",
  "name": "MySQL",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "n",
  "type": "varchar",
  "name": "SQLServer",
  "key": "174508584001"
},
{
  "content": "n",
  "name": "Hadoop",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "None",
  "name": "dir1",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "None",
  "name": "dir2",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "None",
  "name": "dir3",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "None",
  "name": "dir4",
  "type": "varchar",
  "key": "174508584001"
},
{
  "type": "inet",
  "name": "ipaddr",
  "content": "1921680103",
  "key": "174508584001"
},
{
  "content": "y",
  "name": "status",
  "type": "varchar",
  "key": "174508584001"
},
{
  "content": "None",
  "type": "varchar",
  "name": "logintime",
  "key": "174508584001"
},
{
  "content": "None",
  "type": "varchar",
  "name": "logindate",
  "key": "174508584001"
},
{
  "content": "None",
  "type": "varchar",
  "name": "logouttime",
  "key": "174508584001"
},
{
  "content": "client",
  "type": "varchar",
  "name": "user_type",
  "key": "174508584001"
},
{
  "content": "royal",
  "type": "varchar",
  "name": "username",
  "key": "174508584002"
},
{
  "content": "12345",
  "type": "varchar",
  "name": "password",
  "key": "174508584002"
},
{
  "content": "12345",
  "type": "varchar",
  "name": "cpassword",
  "key": "174508584002"
},
{
  "content": "n",
  "type": "varchar",
  "name": "PostgreSQL",
  "key": "174508584002"
},
{
  "content": "n",
  "name": "IBMDB2",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "n",
  "name": "MySQL",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "n",
  "type": "varchar",
  "name": "SQLServer",
  "key": "174508584002"
},
{
  "content": "n",
  "name": "Hadoop",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "None",
  "name": "dir1",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "None",
  "name": "dir2",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "None",
  "name": "dir3",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "None",
  "name": "dir4",
  "type": "varchar",
  "key": "174508584002"
},
{
  "type": "inet",
  "name": "ipaddr",
  "content": "1921680105",
  "key": "174508584002"
},
{
  "content": "y",
  "name": "status",
  "type": "varchar",
  "key": "174508584002"
},
{
  "content": "190835899000",
  "type": "varchar",
  "name": "logintime",
  "key": "174508584002"
},
{
  "content": "20151002",
  "type": "varchar",
  "name": "logindate",
  "key": "174508584002"
},
{
  "content": "None",
  "type": "varchar",
  "name": "logouttime",
  "key": "174508584002"
},
{
  "content": "client",
  "type": "varchar",
  "name": "user_type",
  "key": "174508584002"
},
{
  "content": "abc",
  "type": "varchar",
  "name": "username",
  "key": "174508584003"
},
{
  "content": "12345",
  "type": "varchar",
  "name": "password",
  "key": "174508584003"
},
{
  "content": "12345",
  "type": "varchar",
  "name": "cpassword",
  "key": "174508584003"
},
{
  "content": "n",
  "type": "varchar",
  "name": "PostgreSQL",
  "key": "174508584003"
},
{
  "content": "n",
  "name": "IBMDB2",
  "type": "varchar",
  "key": "174508584003"
}]}

为了执行全文搜索,我使用python脚本中的语法创建了content属性的索引:

^{pr2}$

其中,c是数据库,DSP是集合名。现在,我尝试使用以下语法在上述数据集中执行搜索操作:

FOR doc IN FULLTEXT(DSP, "content", "username") RETURN doc

然后,出现错误:

[1571] in function 'FULLTEXT()': no suitable fulltext index found for fulltext query on 'DSP' (while executing)

请告诉我问题所在,并告诉我在使用python脚本尝试此查询时将使用什么语法。在

谢谢。。。在


Tags: keynamenoneidpostgresqltype语法username
1条回答
网友
1楼 · 发布于 2024-04-25 13:58:56

使用the 10 minutes tutorial和{a2}

我是这样工作的:

from pyArango.connection import *
c = Connection()
db = c.createDatabase(name = "testdb")
DSP= db.createCollection(name = "DSP")

DSP.ensureFulltextIndex(fields=["content"])

doc = DSP.createDocument({"content": "test bla"})
doc.save()

print db.AQLQuery('''FOR doc IN FULLTEXT(DSP, "content", "bla") RETURN doc''', 10)

导致:

^{pr2}$

我使用arangosh重新验证python提示符中的步骤:

arangosh> db._useDatabase("testdb")
arangosh [testdb]> db.DSP.getIndexes()
[ 
  { 
    "id" : "DSP/0", 
    "type" : "primary", 
    "fields" : [ 
      "_key" 
    ], 
    "selectivityEstimate" : 1, 
    "unique" : true, 
    "sparse" : false 
  }, 
  { 
    "id" : "DSP/1241140928711", 
    "type" : "hash", 
    "fields" : [ 
      "content" 
    ], 
    "selectivityEstimate" : 1, 
    "unique" : false, 
    "sparse" : true 
  }, 
  { 
    "id" : "DSP/1241142960327", 
    "type" : "fulltext", 
    "fields" : [ 
      "content" 
    ], 
    "unique" : false, 
    "sparse" : true, 
    "minLength" : 2 
  } 
]
arangosh [testdb]> db.testdb.toArray()
[ 
  { 
    "content" : "test bla", 
    "_id" : "DSP/1241175138503", 
    "_rev" : "1241175138503", 
    "_key" : "1241175138503" 
  } 
]
db._query('FOR doc IN FULLTEXT(DSP, "content", "bla") RETURN doc')

相关问题 更多 >

    热门问题