错误 1064 (42000):manticore 中没有这样的本地索引

问题描述

我正在尝试使用官方 go-sdk 连接到 manticore 数据库。我使用文档说明,希望我添加一个 DROP一个 CREATE 语句,以便以编程方式创建 testrt 索引。

func FillManticore(w http.ResponseWriter,r *http.Request) {
    sess := session.Instance(r)
    cl := manticore.NewClient()
    cl.SetServer("localhost",9312)
    cl.open()

    q := "DROP TABLE testrt"
    res,err := cl.Sphinxql(q)
    if err != nil {
        fmt.Println("create error:",q)
    }

    q = "CREATE TABLE testrt(id int,title text,content text,counter int)"
    fmt.Println("create query is:",q)
    res,err = cl.Sphinxql(q)
    if err != nil {
        fmt.Println("create error:",q)
    }

    res,err = cl.Sphinxql(`replace into testrt values(1,'my subject','my content',15)`)
    fmt.Println(res,err)
    res,err = cl.Sphinxql(`replace into testrt values(2,'another subject','more content',err = cl.Sphinxql(`replace into testrt values(5,'again subject','one more content',10)`)
    fmt.Println(res,err)
    res2,err2 := cl.Query("subject","testrt")
    fmt.Println(res2,err2)

但我明白了:

[ERROR 1064 (42000): no such local index 'testrt'] <nil>
[ERROR 1064 (42000): no such local index 'testrt'] <nil>
[ERROR 1064 (42000): no such local index 'testrt'] <nil>
<nil> <nil>

文档真的很空闲,所以我无法弄清楚我的代码有什么问题。所以我很感激你的提示

解决方法

错误的是您不能添加名为 id 的列,因为默认情况下有一个列。如果您直接使用 mysql 客户端尝试相同的查询,您将得到:

mysql> CREATE TABLE testrt(id int,title text,content text,counter int);
ERROR 1064 (42000): error adding index 'testrt': can not add multiple attributes with same name 'id'

这是固定代码:

    cl := manticore.NewClient()
    cl.SetServer("localhost",9312)
    cl.Open()

    q := "DROP TABLE testrt"
    res,err := cl.Sphinxql(q)
    if err != nil {
        fmt.Println("create error:",err)
    }

    q = "CREATE TABLE testrt(/*id int,*/title text,counter int)"
    fmt.Println("create query is:",q)
    res,err = cl.Sphinxql(q)
    if err != nil {
        fmt.Println("create error:",err)
    }
    fmt.Println(res)

    res,err = cl.Sphinxql(`replace into testrt values(1,'my subject','my content',15)`)
    fmt.Println(res,err)
    res,err = cl.Sphinxql(`replace into testrt values(2,'another subject','more content',err = cl.Sphinxql(`replace into testrt values(5,'again subject','one more content',10)`)
    fmt.Println(res,err)
    res2,err2 := cl.Query("subject","testrt")
    fmt.Println(res2,err2)

返回:

[Query OK,0 rows affected]
[Query OK,1 rows affected] <nil>
[Query OK,1 rows affected] <nil>
Status: ok
Query time: 0s
Total: 3
Total found: 3
Schema:
    Fields:
        title
        content
    Attributes:
        counter: int
        title: string
        content: string
Matches:
    Doc: 1,Weight: 1,attrs: [15 my subject my content]
    Doc: 2,attrs: [15 another subject more content]
    Doc: 5,attrs: [10 again subject one more content]
Word stats:
    'subject' (Docs:3,Hits:3)
 <nil>

区别在于:

8c8
<         fmt.Println("create error:",q)
---
>         fmt.Println("create error:",err)
11c11
<     q = "CREATE TABLE testrt(id int,counter int)"
---
>     q = "CREATE TABLE testrt(/*id int,counter int)"
15c15
<         fmt.Println("create error:",err)
16a17
>     fmt.Println(res)
26d26
<

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...