PHP - Как настроить подстановочный знак и нечеткий поиск в Sphinx с индексами RT - PullRequest
3 голосов
/ 13 мая 2011


Я пытаюсь исследовать индексы sphinx rt для использования в будущем проекте и задать им несколько вопросов.

  1. Есть ли способ сделать поиск по шаблону в индексах sphinx rt?
  2. Как я могу запросить индекс rt с помощью API-интерфейса sphinx для php?

Единственный способ, который я нашел, - это использовать mysql_connect() и mysql_query() с sphinxQL.

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Я задал этот вопрос на форуме sphinxsearch и получил ответ:

Здравствуйте.

barryhunter только что ответил на 'Поиск по шаблону RT индексов':

=== cut===

1.Is there any way to make wildcard search in sphinx rt indexes?

Я так не думаю - пока не реализовано.Проверьте баг-трекер, если нет, то добавьте его как запрос функции.

2.How can I query rt index with sphinx client api for php?

Да, API-интерфейс Sphinx может запрашивать индексы RT (он просто не может их обновить)

(Но поскольку индексы RT не индексируют префиксы / инфиксы (требуется для подстановочных знаков)поиск) это не даст вам никакой пользы. Все, что можно сделать с помощью sphinx API, можно сделать с помощью sphinxQL, теперь я верю)

=== cut ===

0 голосов
/ 13 мая 2011

1.) Чтобы настроить подстановочный и нечеткий поиск в вашей модели, сначала установите свойства enable_star и min_infix_len внутри блока define_index:

    class Post...
        define_index do
         ...

         set_property :enable_star => true
         set_property :min_infix_len => 1 
    end

При желании вы можете сделать настройки глобальными, добавив их в config / sphinx.yml:

 production:
     enable_star: true
     min_infix_len: 1

Остановите, настройте, переиндексируйте и запустите Sphinx Чтобы Sphinx мог получить изменения, нам нужно остановить, настроить, переиндексировать и запустить Sphinx. Thinking Sphinx имеет несколько рейковых заданий, которые позволяют вам сделать это:

    RAILS_ENV=xxx
    rake ts:stop
    rake ts:conf
    rake ts:in
    rake ts:start

Проверка конфигурации Sphinx Теперь откройте файл конфигурации Sphinx в редакторе:

    $ vim config/production.sphinx.conf

Убедитесь, что вы видите правильные настройки:

    ...
    index post_core
    {
        ...
        min_infix_len = 1
        enable_star = true
    }
    ...

Запустите консоль и выполните несколько запросов:

    Post.search('xxx', :star => true)

Теперь осталось создать контроллер поиска и посмотреть:

class SearchController...
    def index
    @query = params[:query]
    options = {
         :page => params[:page], :per_page => params[:per_page], :star => true,
         :field_weights => { :title => 20, :tags => 10, :body => 5 }
    }
    @posts = Post.search(@query, options)
end

Примечание. Чтобы получить релевантные результаты поиска, необходимо назначить разным весам поля.

И, наконец, вот интерфейсный php для публикации результатов поиска в коде представления:

     <% @posts.each do |post| %>
     content goes here...
     <% end %>

2.) Вот пример запроса индекса rt с помощью API клиента sphinx для php:

    include('include/sphinxapi.php');

    $_longitude = '42.358431';
    $_latitude = '-71.059773';

    $search = new SphinxClient();
    $search->SetServer('[SERVER IP REMOVED]', 9312);
    $search->SetConnectTimeout(1);
    $search->SetArrayResult(true);
    $search->SetMatchMode(SPH_MATCH_ALL);
    $search->SetGeoAnchor('venue_latitude', 'venue_longitude', (float)deg2rad($_latitude), (float)deg2rad($_longitude));
    $search->SetSelect('*');
    $search->SetLimits(0, 100);
    $result = $search->Query('b', 'rt_deals');

    # results, print_r($result):

    Array
    (
            [error] =>
            [warning] =>
            [status] => 0
            [fields] => Array
            (
                    [0] => deal_types
            )
            [attrs] => Array
            (
                    [venue_id] => 1
                    [venue_latitude] => 5
                    [venue_longitude] => 5
                    [dt_start] => 2
                    [dt_end] => 2
                    [@geodist] => 5
            )
            [matches] => Array
            (
                    [0] => Array
                            (
                            [id] => 45
                            [weight] => 1
                            [attrs] => Array
                            (
                            [venue_id] => 42
                            [venue_latitude] => 0.73878991603851
                            [venue_longitude] => -1.2425578832626
                            [dt_start] => 0
                            [dt_end] => 0
                            [@geodist] => 15278498
                            )
                            )
                    [1] => Array
                            (
                            [id] => 46
                            [weight] => 1
                            [attrs] => Array
                            (
                            [venue_id] => 41
                            [venue_latitude] => 0.73908978700638
                            [venue_longitude] => -1.2415384054184
                            [dt_start] => 0
                            [dt_end] => 0
                            [@geodist] => 15278115
                            )
                            )
            )
            [total] => 2
            [total_found] => 2
            [time] => 0.000
            [words] => Array
            (
                    [b] => Array
                            (
                            [docs] => 2
                            [hits] => 2
                            )
            )
    )

Для получения дополнительной информации, вы можете проверить полный пример кода GeoSpatial Search с использованием Sphinx Search w / Php от God-Object.com

...