Além de responder às perguntas do OP, deixe-me apresentar algumas idéias sobre o Apache Solr, da introdução simples à instalação e implementação detalhadas .
Introdução Simples
Qualquer pessoa que tenha experiência com os mecanismos de pesquisa acima ou com outros mecanismos que não estão na lista - eu adoraria ouvir suas opiniões.
Solr não deve ser usado para resolver problemas em tempo real. Para os mecanismos de busca, o Solr é praticamente um jogo e funciona perfeitamente .
O Solr funciona bem em aplicativos da Web de alto tráfego ( li em algum lugar que não é adequado para isso, mas estou fazendo o backup dessa declaração ). Ele utiliza a RAM, não a CPU.
- relevância e classificação do resultado
O impulso ajuda a classificar seus resultados no topo. Digamos que você esteja tentando procurar um nome john nos campos firstname e lastname , e queira dar relevância ao campo firstname , depois precisará aumentar o campo firstname como mostrado.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Como você pode ver, o campo de nome é aumentado com uma pontuação de 2.
Mais sobre SolrRelevancy
- velocidade de pesquisa e indexação
A velocidade é incrivelmente rápida e sem comprometer isso. A razão pela qual me mudei para Solr .
Em relação à velocidade de indexação, o Solr também pode manipular JOINS a partir de suas tabelas de banco de dados. Um JOIN mais alto e complexo afeta a velocidade da indexação. No entanto, uma enorme configuração de RAM pode facilmente lidar com essa situação.
Quanto maior a RAM, maior a velocidade de indexação do Solr.
- facilidade de uso e facilidade de integração com o Django
Nunca tentei integrar o Solr e o Django , no entanto, você pode fazer isso com o Haystack . Encontrei algum artigo interessante sobre o mesmo e aqui está o github .
- requisitos de recursos - o site será hospedado em um VPS, portanto, idealmente, o mecanismo de pesquisa não exigiria muita memória RAM e CPU
O Solr gera na RAM; portanto, se a RAM é alta, você não precisa se preocupar com o Solr. .
O uso de RAM do Solr dispara na indexação completa, se você tiver alguns bilhões de registros, poderá usar as importações da Delta de maneira inteligente para lidar com essa situação. Como explicado, o Solr é apenas uma solução quase em tempo real .
O Solr é altamente escalável. Dê uma olhada no SolrCloud . Algumas características principais.
- Shards (ou sharding é o conceito de distribuir o índice entre várias máquinas, por exemplo, se o seu índice cresceu muito)
- Balanceamento de carga (se o Solrj for usado com a nuvem Solr, ele cuida automaticamente do balanceamento de carga usando o mecanismo Round-Robin)
- Pesquisa Distribuída
- Alta disponibilidade
- recursos extras, como "você quis dizer?", pesquisas relacionadas etc.
Para o cenário acima, você pode usar o SpellCheckComponent que acompanha o Solr . Existem muitos outros recursos, o SnowballPorterFilterFactory ajuda a recuperar registros, digamos que, se você digitou livros , em vez de livro , você verá os resultados relacionados ao livro .
Esta resposta se concentra amplamente no Apache Solr e MySQL . O Django está fora do escopo.
Supondo que você esteja no ambiente LINUX, continue com este artigo. (o meu era uma versão do Ubuntu 14.04)
Instalação detalhada
Começando
Baixar Apache Solr a partir daqui . Essa seria a versão é 4.8.1 . Você pode baixar novas versões, eu achei isso estável.
Depois de baixar o arquivo, extraia-o para uma pasta de sua escolha. Diga .. Downloads
ou o que seja .. Então vai parecerDownloads/solr-4.8.1/
No seu prompt. Navegue dentro do diretório
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Então agora você está aqui ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Inicie o servidor de aplicativos Jetty
O Jetty está disponível dentro da pasta de exemplos do solr-4.8.1
diretório, então navegue dentro dele e inicie o Jetty Application Server.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Agora, não feche o terminal, minimize-o e deixe-o de lado.
(DICA: Use & após start.jar para fazer o Jetty Server ser executado em segundo plano)
Para verificar se o Apache Solr é executado com êxito, visite este URL no navegador.http: // localhost: 8983 / solr
Executando o Jetty na porta personalizada
É executado na porta 8983 como padrão. Você pode alterar a porta aqui ou diretamente dentro do jetty.xml
arquivo.
java -Djetty.port=9091 -jar start.jar
Faça o download do JConnector
Esse arquivo JAR atua como uma ponte entre MySQL e JDBC, faça o download da versão independente da plataforma aqui
Após o download, extraia a pasta, copie mysql-connector-java-5.1.31-bin.jar
e cole no diretório lib .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Criando a tabela MySQL para ser vinculada ao Apache Solr
Para usar o Solr , é necessário ter algumas tabelas e dados para pesquisar. Para isso, usaremos o MySQL para criar uma tabela e enviar alguns nomes aleatórios e, em seguida, poderíamos usar o Solr para conectar-se ao MySQL. e indexar essa tabela e suas entradas.
1. estrutura da tabela
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. preencha a tabela acima
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
Entrando no núcleo e adicionando as diretivas da lib
1. Navegue para
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2.Modificando o solrconfig.xml
Adicione essas duas diretivas a esse arquivo.
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Agora adicione o DIH (Data Import Handler)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.Crie o arquivo db-data-config.xml
Se o arquivo existir, então ignore, adicione essas linhas a esse arquivo. Como você pode ver na primeira linha, você precisa fornecer as credenciais do seu banco de dados MySQL . O nome do banco de dados, nome de usuário e senha.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(DICA: você pode ter qualquer número de entidades, mas cuidado com o campo id, se elas forem iguais, a indexação será ignorada.)
4.Modifique o arquivo schema.xml
Adicione isso ao seu schema.xml, como mostrado ..
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Implementação
Indexação
É aqui que está o verdadeiro negócio. Você precisa fazer a indexação dos dados do MySQL para o Solr para fazer uso das consultas do Solr.
Etapa 1: vá para o Painel de administração do Solr
Clique no URL http: // localhost: 8983 / solr no seu navegador. A tela abre assim.
Como o marcador indica, acesse Logon inorder para verificar se alguma das configurações acima levou a erros.
Etapa 2: verifique seus logs
Ok, agora você está aqui. Como você pode, existem muitas mensagens amarelas (AVISOS). Verifique se você não possui mensagens de erro marcadas em vermelho. Anteriormente, em nossa configuração, adicionamos uma consulta de seleção em nosso db-data-config.xml , digamos que se houvesse algum erro nessa consulta, ela seria exibida aqui.
Tudo bem, sem erros. Estamos prontos para ir. Vamos escolher collection1 da lista como representada e selecionar Dataimport
Etapa 3: DIH (manipulador de importação de dados)
Usando o DIH, você se conectará ao MySQL do Solr através do arquivo de configuração db-data-config.xml da interface do Solr e recuperará os 10 registros do banco de dados indexado no Solr .
Para fazer isso, escolha a importação completa e marque as opções Limpar e confirmar . Agora clique em Executar como mostrado.
Como alternativa, você também pode usar uma consulta direta de importação completa como essa.
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
Depois que você clica em Executar , o Solr começa a indexar os registros, se houver algum erro, ele indicaria Falha na indexação e você precisará voltar à seção Log para ver o que deu errado.
Supondo que não haja erros nessa configuração e se a indexação for concluída com êxito., Você receberá esta notificação.
Etapa 4: executando consultas Solr
Parece que tudo correu bem, agora você pode usar as consultas do Solr para consultar os dados que foram indexados. Clique na consulta à esquerda e pressione Executar botão na parte inferior.
Você verá os registros indexados, como mostrado.
A consulta Solr correspondente para listar todos os registros é
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Bem, lá estão todos os 10 registros indexados. Digamos, precisamos apenas de nomes começando com Ja ; nesse caso, você precisa segmentar o nome da coluna solr_name
; portanto, sua consulta é assim.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
É assim que você escreve as consultas do Solr . Para ler mais sobre isso, confira este belo artigo .