Конечно - это легко обойти. Если вам нужно создать свои собственные идентификаторы только для Sphinx, и вы не хотите, чтобы они конфликтовали, вы можете сделать что-то подобное в вашем sphinx.conf (пример кода для MySQL)
source products {
# Use a variable to store a throwaway ID value
sql_query_pre = SELECT @id := 0
# Keep incrementing the throwaway ID.
# "code" is present twice because Sphinx does not full-text index attributes
sql_query = SELECT @id := @id + 1, code AS code_attr, code, description FROM products
# Return the code so that your app will know which records were matched
# this will only work in Sphinx 0.9.10 and higher!
sql_attr_string = code_attr
}
Единственная проблема заключается в том, что вам все еще нужен способ узнать, какие записи были сопоставлены с вашим поиском. Sphinx вернет идентификатор (который теперь не имеет смысла) плюс любые столбцы, которые вы пометили как «атрибуты».
Sphinx 0.9.10 и выше сможет вернуть вам код вашего продукта как часть результатов поиска, поскольку он поддерживает строковые атрибуты.
0.9.10 пока не является официальным релизом, но выглядит великолепно. Похоже, Zawodny запускает его в списке Крейга , поэтому я бы не стал слишком нервничать, полагаясь на эту функцию.