Pergunta

Instalei a Esfinge e o pensamento-sphinx há alguns dias no meu Ruby no Rails 2.3.2, e a pesquisa básica funciona muito bem. Isso significa, sem condições. Agora, quero filtrar a pesquisa com algumas condições.

Eu tenho o modelo de anúncio, e o índice parece o seguinte:

  define_index do
    indexes title, :as => :title, :sortable => true
    indexes description, :as => :description, :sortable => true
  end

Talvez eu esteja errado, mas notei isso apenas quando adicionei o :sortable => true Sintaxe a esses atributos, eu poderia usá -los como condições em minha pesquisa. Caso contrário, não encontrará nada.

Agora, também estou usando o plugin Acts_as_taggable_on, que gerou minhas duas tabelas: tags e taggings. Eu não tenho um modelo para tags, eu só tenho acts_as_taggable_on :tags, :categories no meu modelo de anúncios.

O que eu gostaria de fazer agora é filtrar por tags. Então, tentei adicionar ao meu índice has tags(:id), :as => :tag_ids sem sorte, e também indexes tags(:id), :as => :tag_ids Mas também não funcionou.

Como posso construir os índices para que eu possa fazer algo assim:

Announcement.search 'some word', :conditions => {:tag_ids => some_id}

E também, que é o diferente entre has e indexes

Obrigado, Brian

Foi útil?

Solução

Deixe -me responder suas perguntas ao contrário. indexes whatever Espera uma string, é isso que a Sphinx procurará o texto que você fornece.

Por outro lado, has whatever não adiciona esse conteúdo aos campos pesquisáveis. Ele espera números principalmente, porque você usa essas coisas para classificar e filtrar depois que a Sphinx já fez a pesquisa.

Finalmente, eu acredito que você quer has tags(:id), :as => :tag_ids em seu modelo e :with => {:tag_ids => some_id} em sua pesquisa em vez de usar :conditions. As condições são usadas nos campos de texto que você indexou, como uma maneira de executar pesquisas de texto em campos específicos, em vez de todos os campos indexados. Com é usado para filtrar os resultados usando os atributos que você especificou has whatever.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top