sphinx实现联合查询几个例子

记得以前sphinx是不支持联合查询的,第一次接触sphinx,好像2010年初的时候,当时写过一篇关于sphinx安装的文章。sphinx mmseg mysql 中文分词,下面举例说明,sphinx的联合查询用法。

一,添加二张测试表和数据

 代码如下 复制代码
1,users表和数据
mysql> desc users; 
+----------+-------------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra | 
+----------+-------------+------+-----+---------+----------------+ 
| user_id | int(11) | NO | PRI | NULL | auto_increment | 
| username | varchar(20) | NO | | NULL | | 
+----------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 
 
mysql> select * from users; 
+------------+------------+ 
| user_id | username | 
+------------+------------+ 
| 1311895262 | 张三 | 
| 1311895263 | tank张二 | 
| 1311895264 | tank张一 | 
| 1311895265 | tank张 | 
+------------+------------+ 
4 rows in set (0.00 sec) 
 2,orders表和数据
mysql> desc orders; 
+--------------+-------------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra | 
+--------------+-------------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
| user_id | int(11) | NO | | NULL | | 
| create_time | datetime | NO | | NULL | | 
| product_name | varchar(20) | NO | | NULL | | 
| summary | text | NO | | NULL | | 
+--------------+-------------+------+-----+---------+----------------+ 
5 rows in set (0.00 sec) 
 
mysql> select * from orders; 
+----+------------+---------------------+----------------+--------------+ 
| id | user_id | create_time | product_name | summary | 
+----+------------+---------------------+----------------+--------------+ 
| 9 | 1311895262 | 2014-08-01 00:24:54 | tank is 坦克 | 技术总监 | 
| 10 | 1311895263 | 2014-08-01 00:24:54 | tank is 坦克 | 技术经理 | 
| 11 | 1311895264 | 2014-08-01 00:24:54 | tank is 坦克 | DNB经理 | 
| 12 | 1311895265 | 2014-08-01 00:24:54 | tank is 坦克 | 运维总监 | 
+----+------------+---------------------+----------------+--------------+ 
4 rows in set (0.00 sec) 

二,配置sphinx.conf

 代码如下 复制代码
source order 

 type = mysql 
 sql_host = localhost 
 sql_user = root 
 sql_pass = 
 sql_db = test 
 sql_query_pre = SET NAMES utf8 
 sql_query = \ 
 SELECT a.id, a.user_id,b.username, UNIX_TIMESTAMP(a.create_time) AS create_time, a.product_name, a.summary \ 
 FROM orders a left join users b on a.user_id = b.user_id 
 sql_attr_uint = user_id 
 sql_field_string = username 
 sql_field_string = product_name 
 sql_attr_timestamp = create_time 
 sql_ranged_throttle = 0 
 sql_query_info = SELECT * FROM orders WHERE id=$id 

 
index myorder 

 source = order 
 path = /usr/local/sphinx/var/data/myorder 
 docinfo = extern 
 mlock = 0 
 morphology = none 
 min_word_len = 1 
 charset_dictpath = /usr/local/mmseg3/etc/ 
 charset_type = zh_cn.utf-8 
 ngram_len = 0 
 html_strip = 0 

注意:在这里a.user_id = b.user_id,等号二边一定要有空格,不然就会报错。
三,重启sphinx

 代码如下 复制代码
# pkill searchd 
# /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all 
# /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf 

四,测试sphinx

 代码如下 复制代码
[root@localhost etc]# mysql -h 127.0.0.1 -P 9306                     //登录sphinx,9306端口,不是真实的mysql 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 1 
Server version: 1.11-id64-dev (r2540) 
 
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 
 
Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
 
mysql> select * from myorder where match('张'); 
+------+--------+------------+------------+-------------+----------------+ 
| id | weight | user_id | username | create_time | product_name | 
+------+--------+------------+------------+-------------+----------------+ 
| 9 | 1304 | 1311895262 | 张三 | 1406823894 | tank is 坦克 | 
| 10 | 1304 | 1311895263 | tank张二 | 1406823894 | tank is 坦克 | 
| 11 | 1304 | 1311895264 | tank张一 | 1406823894 | tank is 坦克 | 
| 12 | 1304 | 1311895265 | tank张 | 1406823894 | tank is 坦克 | 
+------+--------+------------+------------+-------------+----------------+ 
4 rows in set (0.01 sec) 
 
mysql> select * from myorder where match('张三'); 
+------+--------+------------+----------+-------------+----------------+ 
| id | weight | user_id | username | create_time | product_name | 
+------+--------+------------+----------+-------------+----------------+ 
| 9 | 2500 | 1311895262 | 张三 | 1406823894 | tank is 坦克 | 
+------+--------+------------+----------+-------------+----------------+ 
1 row in set (0.00 sec) 
时间: 2024-10-27 21:59:13

sphinx实现联合查询几个例子的相关文章

数据库组件 Hxj.Data (十四) (联合查询)

联合查询在前面的例子中已经出现过,只不过没有细说. 先来个例子吧 DbSession.Default.From<Customers>() .InnerJoin<Orders>(Customers._.CustomerID == Orders._.CustomerID) .ToDataTable(); 生成的sql Text: SELECT * FROM [Customers] INNER JOIN [Orders] ON ([Customers].[CustomerID] = [O

SQL联合查询(内联、左联、右联、全联)的语法

  概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join .全联full outer join 的好处及用法. 联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构 (用户名,密码) userid (int) username varchar(20) password varchar(20)   1 jack jackpwd   2 owen owenpwd   T

mysql中视图和union联合查询的使用

一:使用视图的原因:   1:安全性.一般是这样做的:创建一个视图,定义好该视图所操作的数据,之后将用户权限与视图绑定.   2:查询性能提高.   3:有灵活性的功能需求后,需要改动表的结构而导致工作量比较大.那么可以使用虚拟表的形式达到少修改的效果,在实际开发中比较有用.   4:复杂的查询需求或排序可以进行问题分解,创建多个视图获取数据.将视图联合起来得到需要的结果.   二:本次使用视图是因为项目中查询两个表数据并排序分页,但是两个表的数据字段不一,如果改动会导致其他地方的sql需要修改

sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解

问题描述 sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解 我在C#的winform的DataGridView中显示联合查询的结果,下面就是4张表的联合查询的语句,我需要在DataGridView显示的表中做删除操作,只需要知道删除的sql语句就行,用存储过程也好,级联删除也好,希望详细,我已经在这个问题上困扰很久了,万分感谢! 解决方案 在做C#桌面程序时,我们通常会遇到删除dataGridview中选中的一和或都多行数据,在网上查了好多方法,有些只能删除dataGridv

MySQL联合查询语法内联、左联、右联、全联

MySQL联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构(用户id,用户名,密码)    userid   username  password 1   jack jackpwd    2   owen   owenpwd    T2表结构(用户id,用户积分,用户等级)    userid(int)   jifen   dengji      1    20   3        3    50    6    第一:内联( inner join ) 如

Mysql联合查询UNION和UNION ALL的使用介绍_Mysql

一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同.SQL UNION 语法: 复制代码 代码如下: SELECT column_name FROM table1UNIONSELECT column_name FROM table2 注释:默认地,UNION 操作符选取不同的值.如

mssql中sql各种联合查询

在sql server中,我们经常能用到连接,今天总结一下连接的基础知识.连接的分类: 交叉连接CROSS JOIN 内连接INNER JOIN 外连接{左外连接LEFT [OUTER] JOIN :右外连接RIGHT [OUTER] JOIN:全外连接full [outer] join} 自连接 以下通过例子来了解各个连接的异同点: 有两张表Teacher表和Course表: 交叉连接: 1.如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积:

详解Mysql多表联合查询效率分析及优化_Mysql

1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2         由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢

oracle-Oracle中如何只用一条sql语句查询下面的例子

问题描述 Oracle中如何只用一条sql语句查询下面的例子 解决方案 select_statement UNION [ALL] selectstatement [UNION [ALL] selectstatement][-n]其中selectstatement为待联合的SELECT查询语句.用联合查询足以 解决方案二: 这个只能在后台代码判断并组装语句,然后联表查询 解决方案三: Oracle SQL语句查询例子用一条SQL语句查询分组前三名数据常用的sql语句查询例子