Игнорирование апострофов в индексах сфинкса - PullRequest
1 голос
/ 27 января 2010

В моем файле конфигурации sphinx у меня есть следующее:

ignore_chars: "U+0027"
charset_table: "0..9, a..z, _, A..Z->a..z, U+00C0->a, U+00C1->a,
  U+00C2->a, U+00C3->a, U+00C4->a, U+00C5->a, U+00C7->c, U+00C8->e,
  U+00C9->e, U+00CA->e, U+00CB->e, U+00CC->i, U+00CD->i, U+00CE->i [SNIP]"

(Запись charset_table отсюда: http://speeple.com/unicode-maps.txt)

Ожидаемый результат заключается в том, что запрос kyles вернет все записи, соответствующие kyles и / или kyle's, поскольку я говорю sphinx исключить '(одинарную кавычку / apos) из индекса (ab'cd - > abcd). Однако на практике этого не происходит.

1 Ответ

0 голосов
/ 07 апреля 2011

Я считаю, что добавление его в ignore_chars имеет противоположный результат желаемого эффекта. Это говорит sphinx не разделять этот символ, но вместо этого он свернет слово вокруг символов, которые будут игнорироваться. Таким образом, kyle's станет kyles вместо kyle и s.

Решение, которое я только что попробовал для этой проблемы, которая, кажется, сработала, состояло в том, чтобы добавить s к моему списку стоп-слов (может потребоваться также 's, не помню). Сфинкс, кажется, разделился kyle's на слова kyle и 's. Поскольку режим совпадения включен, некоторые документы не совпадают для 's. Добавление его к стоп-словам, похоже, дает желаемый эффект.

Кажется, что нормальный ствол должен позаботиться об этом, однако, так что, может быть, мы оба делаем что-то не так ...

...