해결책 (또는 해결 방법)을 찾았습니다 : regexp_filter을 사용하십시오.
그래서 스핑크스 지수의 구성은 다음과 같이 지금 같습니다
...
ignore_chars = -
regexp_filter = \b([\w\d]+)-([\w\d]+)\b => \1\2 \1 \2
...
을 따라서 스핑크스는 인덱스에 텍스트를 넣어 바로 전에 두 가지 형태로 모든 대시 함유 단어를 분할합니다 : 첫 번째 대시 단순히 제거 하나를 두 번째로 대시가 공백으로 바뀌 었습니다. 색인 생성의 순간에 "Foo-Bar"라는 텍스트의 3 단어가 색인 생성됩니다 : "FooBar", "Foo"및 "Bar". "Foo-Bar"(대시는 ignore_chars
목록이므로 삭제 될 것입니다), "FooBar"(이 단어는 색인에 있음) 및 "Foo Bar"(두 단어는 모두 다음과 같은 검색어로 검색 할 수 있습니다. 색인에).
여기서 중요한 문제는 두 가지 유형의 쿼리에 대해 정확한 위상 일치를 동시에 사용할 수 없다는 것입니다. I. e. "Bar BazQux"
또는 "Bar Baz-Qux"
을 검색하면 결과가 표시됩니다. 그러나 "Bar Baz Qux"
에 대해서는 아무 것도 얻을 수 없습니다. 내 구체적인 경우에는 문제가 아니지만이 접근법을 사용하려는 모든 사람들을 위해 - 나는 당신에게 경고했습니다.
이 작업을 수행하는 더 좋은 방법을 알고 있거나 해결 방법에 제가 놓친 몇 가지 단점이 있다면 알려주십시오. here을 같이
또 다른 가능한 해결책은 트라이 그램의 사용. 이 방법은 가능한 사용자의 실수에도 도움이되지만 구현하기가 더 어렵습니다.
좋은 해결책입니다. 너는 그것을 받아 들여야한다. –