如何索引纯文本文件以在 Sphinx 中进行搜索
How to index plain text files for search in Sphinx
我浏览了数十篇文章和论坛帖子,查看了官方文档,但找不到答案。 article 听起来很有前途,因为据说 The data to be indexed can generally come from very different sources: SQL databases, plain text files, HTML files
,但不幸的是,与所有其他文章和论坛主题一样,它专门用于 MySQL
。
听到 Sphinx
这么酷,它可以做这个做那个,它几乎可以用你喜欢的任何数据源做任何你想做的事情,这让我感到很奇怪。但是所有那些数据源不是 MySQL
的例子在哪里?当您想扫描世界上最简单的数据源 - 纯文本文件时,这只是 Sphinx
配置的一个最微小和最简单的分步示例。比方说,我已经安装了 Sphinx
并想扫描我的主目录(递归地)以查找所有包含 "Hello world" 的纯文本文件。我应该怎么做才能实现它?
先决条件:
Ubuntu
sudo apt-get install sphinxsearch
- ...接下来是什么???
在继续之前先看看这个Sphinx without SQL!。
理想情况下我会这样做。
我们将使用 Sphinx 的 sql_file_field 来索引 table 和文件路径。这是 PHP 脚本,用于为特定目录 (scandir) 创建一个 table 文件路径。
<?php
$con = mysqli_connect("localhost","root","password","database");
mysqli_query($con,"CREATE TABLE fileindex ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,text VARCHAR(100) NOT NULL);");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$dir = scandir('/absolute/path/to/your/dir/');
foreach ($dir as $entry) {
if (!is_dir($entry)) {
$path= "/absolute/path/to/your/dir/$entry";
mysqli_query($con,"INSERT INTO fileindex ( text ) VALUES ( '$path' )");
}
}
mysqli_close($con);
?>
下面的代码是 sphinx.conf 文件,用文件路径索引 table。注意 sql_file_field 它将索引那些在文本(文件路径)列中指定的文件
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = filetest
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,text from fileindex
sql_file_field = text
}
index filename
{
source = src1
path = /var/lib/sphinxsearch/data/files
docinfo = extern
}
indexer
{
mem_limit = 128M
}
searchd
{
log = /var/log/sphinxsearch/searchd.log
pid_file = /var/log/sphinxsearch/searchd.pid
}
创建table后,将sphinx.conf保存在/etc/sphinxsearch/sphinx.conf中只需运行 sudo indexer filename --rotate,你的索引就准备好了!键入搜索,然后键入关键字以获取结果。
我浏览了数十篇文章和论坛帖子,查看了官方文档,但找不到答案。 article 听起来很有前途,因为据说 The data to be indexed can generally come from very different sources: SQL databases, plain text files, HTML files
,但不幸的是,与所有其他文章和论坛主题一样,它专门用于 MySQL
。
听到 Sphinx
这么酷,它可以做这个做那个,它几乎可以用你喜欢的任何数据源做任何你想做的事情,这让我感到很奇怪。但是所有那些数据源不是 MySQL
的例子在哪里?当您想扫描世界上最简单的数据源 - 纯文本文件时,这只是 Sphinx
配置的一个最微小和最简单的分步示例。比方说,我已经安装了 Sphinx
并想扫描我的主目录(递归地)以查找所有包含 "Hello world" 的纯文本文件。我应该怎么做才能实现它?
先决条件:
Ubuntu
sudo apt-get install sphinxsearch
- ...接下来是什么???
在继续之前先看看这个Sphinx without SQL!。
理想情况下我会这样做。
我们将使用 Sphinx 的 sql_file_field 来索引 table 和文件路径。这是 PHP 脚本,用于为特定目录 (scandir) 创建一个 table 文件路径。
<?php
$con = mysqli_connect("localhost","root","password","database");
mysqli_query($con,"CREATE TABLE fileindex ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,text VARCHAR(100) NOT NULL);");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$dir = scandir('/absolute/path/to/your/dir/');
foreach ($dir as $entry) {
if (!is_dir($entry)) {
$path= "/absolute/path/to/your/dir/$entry";
mysqli_query($con,"INSERT INTO fileindex ( text ) VALUES ( '$path' )");
}
}
mysqli_close($con);
?>
下面的代码是 sphinx.conf 文件,用文件路径索引 table。注意 sql_file_field 它将索引那些在文本(文件路径)列中指定的文件
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = filetest
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,text from fileindex
sql_file_field = text
}
index filename
{
source = src1
path = /var/lib/sphinxsearch/data/files
docinfo = extern
}
indexer
{
mem_limit = 128M
}
searchd
{
log = /var/log/sphinxsearch/searchd.log
pid_file = /var/log/sphinxsearch/searchd.pid
}
创建table后,将sphinx.conf保存在/etc/sphinxsearch/sphinx.conf中只需运行 sudo indexer filename --rotate,你的索引就准备好了!键入搜索,然后键入关键字以获取结果。