Сфинкс 3.1.1 не возвращает правильный фрагмент - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть Sphinx 3.1.1. установка, где я хочу показать фрагменты найденных результатов с помощью DocStore.Тем не менее, фрагмент только возвращает начало содержимого документа.

Используемый мной запрос:

SELECT id, SNIPPET(content, QUERY()) AS snippet FROM test_index WHERE MATCH('test');

Это возвращает мне результаты, такие как:

+--+--------------------------------------------------------+
|id |snippet                                                |                
+-----------------------------------------------------------+
|1  |this is a test document to test Sphinx 3.1.1 ...       |
+-----------------------------------------------------------+
|2  |another test document to test Sphinx 3.1.1. ...        |
+--+--------------------------------------------------------+

Обратите внимание, что возвращаемые фрагменты не имеют меток b вокруг слова поиска test, а возвращаемый фрагмент является начальной строкой документа.Если я, например, ищу test2, результаты будут такими же (документы содержат test2 далее в содержании, но фрагмент показывает только первые x слов из содержимого без выделения?)

Конфигурация моего индекса:

index test_index
{
    type          = rt
    path          = /mtn/data001/test_index
    rt_field      = content
    stored_fields = content
}

Что я делаю не так и почему мой фрагмент не содержит тегов выделения?

1 Ответ

0 голосов
/ 20 ноября 2018

Хм, я только что попытался скопировать / вставить ваш test_index в файл конфигурации и запустить экземпляр sphinx3 ...

barry@tea:~/sphinx-3.1.1$ bin/searchd --config test.conf
Sphinx 3.1.1 (commit 612d99f)
Copyright (c) 2001-2018, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file 'test.conf'...
listening on all interfaces, port=10312
listening on all interfaces, port=10306
precaching index 'test_index'
precached 1 indexes in 0.001 sec

barry@tea:~/sphinx-3.1.1$ mysql --protocol=tcp -P10306  --prompt='sphinxQL3>' --default-character-set=utf8
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 3.1.1 (commit 612d99f)

sphinxQL3>SELECT id, DOCUMENT() as doc, DOCUMENT({content}) FROM test_index WHERE MATCH('test');
Empty set (0.00 sec)

sphinxQL3>insert into test_index values (1,'this is a test');
Query OK, 1 row affected (0.00 sec)

sphinxQL3>insert into test_index values (2,'this is a test more');
Query OK, 1 row affected (0.00 sec)

sphinxQL3>SELECT id, SNIPPET(DOCUMENT({content}), QUERY()) AS snippet FROM test_index WHERE MATCH('test');
+------+----------------------------+
| id   | snippet                    |
+------+----------------------------+
|    1 | this is a <b>test</b>      |
|    2 | this is a <b>test</b> more |
+------+----------------------------+
2 rows in set (0.00 sec)

sphinxQL3>SELECT id, SNIPPET(content, QUERY()) AS snippet FROM test_index WHERE MATCH('test');
+------+----------------------------+
| id   | snippet                    |
+------+----------------------------+
|    1 | this is a <b>test</b>      |
|    2 | this is a <b>test</b> more |
+------+----------------------------+
2 rows in set (0.00 sec)

sphinxQL3>SELECT id, SNIPPET(content, QUERY()) AS snippet FROM test_index WHERE MATCH('more');
+------+----------------------------+
| id   | snippet                    |
+------+----------------------------+
|    2 | this is a test <b>more</b> |
+------+----------------------------+
1 row in set (0.00 sec)

sphinxQL3>insert into test_index values (3,'this is a test document to test Sphinx 3.1.1 Technically, Sphinx is a standalone software package provides fast and relevant full-text search functionality to client applications. It was specially designed to integrate well with SQL databases storing the data, and to be easily accessed by scripting languages. However, Sphinx does not depend on nor require any specific database to function. ');
Query OK, 1 row affected (0.00 sec)

sphinxQL3>SELECT id, SNIPPET(content, QUERY()) AS snippet FROM test_index WHERE MATCH('test');                                                                                                    +------+-------------------------------------------------------------------------------+
| id   | snippet                                                                       |
+------+-------------------------------------------------------------------------------+
|    1 | this is a <b>test</b>                                                         |
|    2 | this is a <b>test</b> more                                                    |
|    3 | this is a <b>test</b> document to <b>test</b> Sphinx 3.1.1 Technically,  ...  |
+------+-------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

sphinxQL3>SELECT id, SNIPPET(content, QUERY()) AS snippet FROM test_index WHERE MATCH('scripting');
+------+------------------------------------------------------------------------------------------+
| id   | snippet                                                                                  |
+------+------------------------------------------------------------------------------------------+
|    3 |  ...  to be easily accessed by <b>scripting</b> languages. However, Sphinx does not ...  |
+------+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Так что кажется, что 3.1.1 работает как таковой, но что-то странноепроисходит с вашей конфигурацией.

Возможно, попробуйте удалить файлы test_index (пока searchd выключен) и повторите попытку.Возможно, вы как-то повредили ваши индексные файлы (например, изменили конфигурацию после ее создания) - это довольно легко сделать во время эксперимента

...