我有简单的桌子
id: primary
name: varchar fulltext index
这是我的Sphinx配置 https://justpaste.it/1okop
索引器警告有关docinfo
Sphinx 2.2.11-id64-release(95ae9a6)版权所有(c)2001-2016,安德鲁 Aksyonoff Sphinx Technologies Inc(c)2008-2016版权所有 (http://sphinxsearch.com)
使用配置文件'/etc/sphinxsearch/sphinx.conf'...索引索引 '单词'...警告:属性计数为0:切换为无docinfo 收集了10000个文档,0.1 MB排序了0.0 Mhit,完成了100.0%,总计10000 docs,79566字节总计0.065秒,1210829字节/秒,152179.20 docs / sec总共3次读取,0.000 sec,94.6 kb /通话平均值,0.0毫秒/通话平均值 总共9次写入,0.000秒,47.5 kb /通话平均值,0.0毫秒/通话平均值
但是这里Sphinx: WARNING: Attribute count is 0: switching to none docinfo表示没什么问题。
好的,开始服务并搜索部分单词:
SELECT *
FROM test_words
where match (name) AGAINST ('lema')
No rows.
Tha same as
SELECT *
FROM test_words
where match (name) AGAINST ('*lema*')
没有行。
同时有查询结果
SELECT *
FROM `test_words`
where position('lema' in name)>0
据我所知-Sphinx并不是按单词的一部分进行搜索。 为什么以及如何解决?
然后-如果我取消评论
min_infix_len = 3
infix_fields = name
我明白了
WARNING: index 'words': prefix_fields and infix_fields has no effect with dict=keywords, ignoring
还有一个-显示引擎; 不显示Sphinx引擎,现在正常吗? mysql服务已重新启动。
所有sql查询都是通过登录localhost:3312的Adminer运行的
答案 0 :(得分:0)
在Sphinx中没有像position()这样的函数,也不像'match(name)Against'这样的语法。根据您的配置,您的索引是“ words”,而您的请求是针对“ test_words”的,而test_words是您从中构建索引的源表。在我看来,您连接的不是Sphinx,而是mysql。如果您正在寻找MySQL与Sphinx之间更紧密的集成,请尝试SphinxSE(http://sphinxsearch.com/docs/devel.html#sphinxse),它将显示在“ SHOW ENGINES”中,或者如果您不想使用SphinxSE进行MySQL编译,则可能需要尝试Manticore Search(Sphinx的一个分支),因为它已与FEDERATED引擎(https://docs.manticoresearch.com/2.6.4/html/federated_storage_engine.html)集成在一起,而该引擎默认是在mysql中编译的,您只需要正确启动它即可启用它。
如果您想使用Sphinx传统方式,只需确保连接到它,而不是MySQL。