sphinx搜索引擎中文返回设置
搜索后返回uname是中文的,该如何在sphinx.conf配置,才能显示uname
1. id=9, weight=1, uname=(unknown-attr-type=7), ucreatedate=Fri Oct 13 15:27:28 CST 2017
2. id=199, weight=1, uname=(unknown-attr-type=7), ucreatedate=Thu Sep 28 10:09:35 CST 2017
下面是我的配置文件
#
# Sphinx configuration file sample
#
# WARNING! While this sample file mentions all available options,
# it contains (very) short helper descriptions only. Please refer to
# doc/sphinx.html for details.
#
#############################################################################
## data source definition
#############################################################################
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = test
sql_port = 3306 # optional, default is 3306
# sql_sock = /tmp/mysql.sock
sql_query_pre = SET NAMES utf8
# 关闭缓存
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query = SELECT uuserid,uuserid as userid1,ULOGINNAME,uname,UUSERTYPE,USEX,UMOBILE,UCARDTYPE FROM xt_userinfo
## 有的时候有多个表,我们想要查询的字段在其他表中。这个时候就需要对sql_query进行join操作。
## 而这个join操作可能非常慢,导致建立索引的时候特别慢,那么这个时候,就可以考虑在sphinx端进行join操作了。
## sql_joined_field是增加一个字段,这个字段是从其他表查询中查询出来的。
## 这里封号后面的查询语句是有要求的,如果是query,则返回id和查询字段,如果是payload-query,则返回id,查询字段和权重。
# sql_joined_field = tags from query; SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
# sql_joined_field = wtags from payload-query; SELECT docid, tag, tagweight FROM tags ORDER BY docid ASC
# sql_file_field = content_file_path
# sql_query = \
# SELECT doc.id, doc.id AS group, doc.title, doc.data \
# FROM documents doc \
# WHERE id>=$start AND id<=$end
## 当数据源数据太大的时候,一个sql语句查询下来往往很有可能锁表等操作。
## 那么我么就可以使用多次查询,那么这个多次查询就需要有个范围和步长,sql_query_range和sql_range_step就是做这个使用的
# 分区查询设置
# sql_query_range = SELECT MIN(id),MAX(id) FROM documents
## 获取最大和最小的id,然后根据步长来获取数据。比如下面的例子,如果有4500条数据,这个表建立索引的时候就会进行5次sql查询。
## 而5次sql查询每次的间隔时间是使用sql_ranged_rhrottle来进行设置的。单位是毫秒。
# range query step
# optional, default is 1024
# 分区查询的步长
# sql_range_step = 1000
# sql_attr_uint和sql_attr_timestamp用于定义用于api过滤或者排序
# 整型
sql_attr_uint = UUSERTYPE
sql_attr_uint = USEX
# sql_query_info_pre = SET NAMES utf8
# 时间戳
# sql_attr_timestamp = ucreatedate
# sql_attr_bool = is_deleted
# 长整型属性
# sql_attr_bigint = my_bigint_id
# 排序字段
# sql_attr_timestamp = date_added
# 用于命令界面端(CLI)调用的测试(一般来说不需要)
sql_query_info = SELECT UUSERID,ULOGINNAME,uname,UUSERTYPE,USEX,UMOBILE,UCARDTYPE,UNIX_TIMESTAMP(UCREATEDATE) as ucreatedate FROM xt_news WHERE searchid=$id
# 浮点型
# sql_attr_float = lat_radians
# 多值属性(MVA)
# 试想一下,有一个文章系统,每篇文章都有多个标签,这个文章就叫做多值属性。
# 我要对某个标签进行查询过滤,那么在建立查询的时候就应该把这个标签的值放入到索引中。
# 这个字段,sql_attr_multi就是用来做这个事情的
# sql_attr_multi = uint tag from query; SELECT docid, tagid FROM tags
# sql_attr_multi = uint tag from ranged-query; \
# SELECT docid, tagid FROM tags WHERE id>=$start AND id<=$end; \
# SELECT MIN(docid), MAX(docid) FROM tags
# 字符串属性。
# sql_attr_string = ULOGINNAME
sql_attr_string = UNAME
# sql_attr_string = USEX
# sql_field_string = ULOGINNAME
# 在sql_query执行后立即操作,sql_query_post是在sql_query执行后执行,而sql_query_post_index是在索引建立完成后才执行。
# sql_query_post =
# sql_query_post_index = REPLACE INTO counters ( id, val ) \
# VALUES ( 'max_indexed_id', $maxid )
# 分步查询时间间隔(毫秒)
# sql_ranged_throttle = 0
# sql_query_killlist = SELECT id FROM documents WHERE edited>=@last_reindex
}
# 主数据源索引
index test1
{
# 索引类型,包括有plain,distributed和rt。分别是普通索引/分布式索引/增量索引。默认是plain。
# type = plain
# 索引数据源
source = src1
## 索引文件存放路径
path = D:/sphinx/data/test1
#添加utf-8编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
docinfo = extern
dict = keywords
mlock = 0
morphology = none
min_word_len = 1
# charset_type = zh_cn.utf-8
# expand_keywords = 1
# 简单分词,只支持0 和1 ,如果要搜索中文,请指定为1
ngram_len = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
ngram_chars = U+3000..U+2FA1F
html_strip = 0
}
index rt
{
type = rt
path = D:/sphinx/data/rt
rt_field = uname
rt_attr_uint = uusertype
}
indexer
{
## 内存大小限制 默认是 128M
# memory limit, in bytes, kiloytes (16384K) or megabytes (256M)
# optional, default is 128M, max is 2047M, recommended is 256M to 1024M
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
# 服务进程日志存放路径,一旦sphinx出现异常,基本上可以从这里查询有效信息
log = D:/sphinx/log/searchd.log
# 客户端查询日志 尤为有用 它将在运行时显示每次搜索并显示结果
query_log = D:/sphinx/log/query.log
# 请求超时
read_timeout = 5
client_timeout = 300
# 同时可执行的最大searchd 进程数
max_children = 30
persistent_connections_limit = 30
# 进程ID文件
pid_file = D:/sphinx/log/searchd.pid
# windows下启动searchd服务一定要注释掉这个 是否支持无缝切换,做增量索引时通常需要(0/1)
# seamless_rotate = 1
# 在启动运行时是否提前加载所有索引文件
preopen_indexes = 1
# 是否释放旧的索引文件 1 不释放 0 释放
unlink_old = 1
# attr_flush_period = 900
# MVA跟新池大小(默认为1M)
mva_updates_pool = 1M
# 最大允许的网络包大小(默认8M)
max_packet_size = 8M
# 每个查询最大允许的过滤器数量(默认256)
max_filters = 256
#每个过滤器最大允许的值的个数(默认4096)
max_filter_values = 4096
# listen_backlog = 5
# read_buffer = 256K
# read_unhinted = 32K
# 每个组的最大查询数(默认为32)
max_batch_queries = 32
workers = threads # for RT to work
}
common
{
# lemmatizer_base = /usr/local/share/sphinx/dicts
# on_json_attr_error = fail_index
# json_autoconv_numbers = 1
# json_autoconv_keynames = lowercase
# rlp_root = /usr/local/share/sphinx/rlp
# rlp_environment = /usr/local/share/sphinx/rlp/rlp/etc/rlp-environment.xml
# rlp_max_batch_size = 100k
# rlp_max_batch_docs = 100
# plugin_dir = /usr/local/sphinx/lib
}