我试图通过Linux 命令行以这种方式连接到SphinxQL服务器:
> mysql -P 9306
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)
我的Sphinx配置文件有2个监听条目:
listen = 9312
listen = 9306:mysql41
Run Code Online (Sandbox Code Playgroud)
searchd守护程序正在运行:
> ps ax | grep searchd
10727 ? S 0:00 /usr/local/sphinx/bin/searchd
10728 ? Sl 0:00 /usr/local/sphinx/bin/searchd
Run Code Online (Sandbox Code Playgroud)
常规搜索查询完美运行:
> /usr/local/sphinx/bin/search StackOverflow | more
Sphinx 2.0.4-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/usr/local/sphinx/etc/sphinx.conf'...
index 'test1': query 'StackOverflow ': returned 2 matches of 2 total …Run Code Online (Sandbox Code Playgroud) 我在mysql数据库中有大约2000行.
每行最多300个字符,包含一两句话.
我使用mysql内置的全文搜索来搜索这些行.
我想添加一个功能,以便在可能的情况下纠正拼写错误和意外错误拼写.
例如,如果有人在搜索框中输入"right shlder",则在执行搜索时这将等同于"右肩".
您对添加此类功能的最简单方法有何建议?是否值得添加某种外部搜索引擎,如lucene?(对于如此小的数据集来说,这似乎有点过分了.)或者是否有更简单的方法?
在此先感谢您的帮助.
任何人都可以用简单的语言解释像Sphinx这样的全文服务器是如何工作的?在纯SQL中,可以使用这样的SQL查询来搜索文本中的某些关键字:
select * from items where name like '%keyword%';
Run Code Online (Sandbox Code Playgroud)
但是在各种Sphinx插件生成的配置文件中,我根本看不到任何类似的查询.它们包含如下所示的SQL语句,它们似乎将搜索划分为不同的ID组:
SELECT (items.id * 5 + 1) AS id, ...
WHERE items.id >= $start AND items.id <= $end
GROUP BY items.id
..
SELECT * FROM items WHERE items.id = (($id - 1) / 5)
Run Code Online (Sandbox Code Playgroud)
它可以用简单的词语解释这些查询是如何工作的以及它们是如何生成的?
我正在使用SphinxSearch查询一些内容并拥有我想用MySQL查询的对象的id.我的ID数组根据Sphinx给出的等级排序.因此,我想像这样制作一个MySQL:
SELECT * FROM table WHERE id IN (1,17,2)
ORDER BY FIELD(id,1,17,2)
Run Code Online (Sandbox Code Playgroud)
我知道我能做到:
Table::whereIn('id', $ids)->get();
Run Code Online (Sandbox Code Playgroud)
但我无法得到我的订单.
我怎么能用Laravel以适当的方式做到这一点?
我已经设法最终构建并运行pocketsphinx(pocketsphinx_continuous).我遇到的问题是如何提高准确性.据我所知,您可以指定字典文件(-dict test.dic).所以我采用了默认的字典文件并添加了一些相同单词的发音,例如:
pencil P EH N S AH L
pencil(2) P EH N S IH L
spaghetti S P AH G EH T IY
spaghetti(2) S P UH G EH T IY
Run Code Online (Sandbox Code Playgroud)
然而,pocketphinx仍然无法识别任何一个词.我知道你也可以指定一个jsgf文件,但对于短语和语法来说似乎更多.如何让pocketphinx识别铅笔和意大利面等常用词?
谢谢
-麦克风
我正在进行狮身人面像搜索,但却出现了一些非常奇怪的结果.任何帮助表示赞赏.
所以,例如,如果我输入"50",我得到:
这很棒,但是当我搜索"50 Ce"时,我得到:
和其他疯狂的结果.此外,当我搜索"50 Cent"时,正确的结果位于顶部,但随后是随机结果.有什么想法吗?
PHP代码:
$query = $_GET['query'];
if (!empty($query))
{
$sphinx->SetMatchMode(SPH_MATCH_ALL);
$sphinx->AddQuery($query, 'artists');
$sphinx->AddQuery($query, 'variations');
$sphinx->SetFilter('name', array(3));
$sphinx->SetLimits(0, 10);
$result = $sphinx->RunQueries();
echo '<pre>';
switch ($result)
{
case false:
echo 'Query failed: ' . $sphinx->GetLastError() . "\n";
break;
default:
if ($sphinx->GetLastWarning())
{
echo 'WARNING: ' . $sphinx->GetLastWarning() . "\n";
}
if (is_array($result[0]['matches']) && count($result[0]['matches']))
{
foreach ($result[0]['matches'] as $value => $info)
{
$artist = artistDetails($value);
echo $artist['name'] . "\n"; …Run Code Online (Sandbox Code Playgroud) 我正在将我的应用程序移植到MySQL的Sphinx中,并且很难解决这个问题,或者甚至需要移植它(我真的想知道是否值得使用sphinx这个特定的效率案例来提高效率/速度):
users
uid uname
1 alex
2 barry
3 david
friends
uid | fid
1 2
2 1
1 3
3 1
Run Code Online (Sandbox Code Playgroud)
细节是:
- InnoDB
- 用户: uid上的索引,uname上的索引
- 朋友: uid上的组合索引,fid
通常,使用mysql搜索所有alex的朋友:
$uid = 1
$searchstr = "%$friendSearch%";
$query = "SELECT f.fid, u.uname FROM friends f
JOIN users u ON f.fid=u.uid
WHERE f.uid=:uid AND u.uname LIKE :friendSearch";
$friends = $dbh->prepare($query);
$friends->bindParam(':uid', $uid, PDO::PARAM_INT);
$friends->bindParam(':friendSearch', $searchstr, PDO::PARAM_STR);
$friends->execute();
Run Code Online (Sandbox Code Playgroud)
使用sphinx vs mysql找到alex的朋友是否更有效率,或者这会是一种矫枉过正?
如果sphinx会更快,因为列表会让成千上万的人看到,索引查询会是什么样子?我如何删除与sphinx不再存在的友谊,我可以在这种情况下有一个详细的例子吗?我应该更改此查询以使用Sphinx吗?
这无疑与全文搜索引擎的比较相似(但不是重复)- Lucene,Sphinx,Postgresql,MySQL?然而,我正在寻找的是具体的,支持的,来自多个可用系统的经验益处的建议(似乎有很多:"我使用过lucene,但不是sphinx",并且副反之亦然).
设置:标准LAMP(Mysql 5.0,PHP 5).
MySQL:表正在使用InnoDB引擎进行外键约束
我们正在研究索引数据,而不是页面.要索引的数据可能是多种语言(utf-8 charset)
我遇到的一些比较(如http://blog.evanweaver.com/articles/2008/03/17/rails-search-benchmarks/)要么不完全适用(雪貂是一个lucene端口但不是与Zend_Search_Lucene相同,或者他们正在推动他们自己的系统/实现(不完全不偏不倚).
我遇到的其他一些(例如http://whatstheplot.com/blog/tag/lucene/和http://pagetracer.com/2008/02/15/sphinx-and-lucene-search-engines-first -impressions /)为两个系统的性能提供了截然不同的结果.
此外,在我读过的大部分内容中,忽略了Xapian.这还值得考虑吗?
所以...我希望你们这里的一些人对这个问题有一些经验,可以帮助提出一些建议,或指出我正确的方向.
我已经重新编制了我的Sphinx搜索索引/usr/local/sphinx/bin/indexer --all --rotate,并将原始索引输出文件重命名为其他内容.只需更改传递的索引参数就$sphinx->Query($query, $index);不会返回任何结果.
我怀疑守护进程不知道新的索引文件存在.所以我跑了
sudo /usr/local/sphinx/bin/searchd
再次尝试重新启动它.但它扔了
FATAL: failed to lock pid file '/usr/local/sphinx/var/log/searchd.pid': Resource temporarily unavailable (searchd already running?)
我不得不kill使用搜索守护进程的2个进程并再次启动它以从新的索引文件中获取.是否有一种优雅的方式来重新启动它?
我一直在使用mysql FTS,但最近切换到sphinx进行测试.
在centos 7上安装了sphinx
Linux production 3.10.0-123.8.1.el7.x86_64 #1 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
的sphinx.conf
source content_src1
{
type = mysql
sql_host = localhost
sql_user =
sql_pass =
sql_db = t_prod2
sql_port = 3306 # optional, default is 3306
sql_query = \
SELECT content.record_num, \
content.title, \
content.category, \
content.upload_date, \
content.comments_count, \
content.verified, \
content.uploader, \
content.size \
FROM content WHERE enabled = 1
sql_attr_uint = record_num
sql_attr_string = title
}
index content_index1
{
source = content_src1
path = /var/lib/sphinx/content_index1
morphology = stem_en
min_word_len …Run Code Online (Sandbox Code Playgroud)