问题描述
我正在尝试使用官方 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
<