如何索引纯文本文件以便在Sphinx中进行搜索

时间:2015-06-12 23:20:46

标签: search sphinx plaintext

我扫描了几十篇文章和论坛帖子,通过官方文档查看,但无法找到答案。这个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
  • ......接下来是什么????

1 个答案:

答案 0 :(得分:5)

在继续Sphinx without SQL!之前先看一下。

理想情况下我会这样做。

我们将使用Sphinx的sql_file_field来索引具有文件路径的表。这是用于创建具有特定目录(scandir)的文件路径的表的PHP脚本。

<?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文件,用filepath索引表。请注意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
}

创建表后,在/etc/sphinxsearch/sphinx.conf中保存sphinx.conf只需运行sudo indexer filename --rotate,你的索引就准备好了!输入搜索,然后键入关键字以获得结果。