O Solr é um servidor de aplicativos de pesquisa de nível corporativo independente que fornece uma interface de API do tipo Web Service. Os usuários podem enviar arquivos XML de um determinado formato para o servidor de mecanismo de pesquisa por meio de solicitações HTTP e gerar índices; Eles também podem enviar solicitações de pesquisa por meio de operações HTTP e obter o resultado de retorno no formato XML/JSON. Desenvolvido usando Java5, baseado no Lucene.
O Lucene é um subprojeto da equipe do Projeto 4 Jacarta da Apache Software Foundation. É um kit de ferramentas de mecanismo de pesquisa de texto completo, ou seja, não é um mecanismo completo de pesquisa de texto completo, mas uma arquitetura de mecanismo de pesquisa de texto completo, fornecendo um mecanismo de consulta completo e um mecanismo de índice e um mecanismo de análise de texto parcial (idiomas ingleses e alemães ocidentais).
Entre eles, os princípios básicos da pesquisa de texto completo da Lucene são consistentes com a tecnologia no curso de pesquisa na web ministrado por Guo Jundaniu. Ele usa segmentação de palavras, análise gramatical semântica, modelo de espaço vetorial e outras tecnologias para alcançá -lo. A seguir, é apresentado uma postagem mais detalhada do blog: http://www.cnblogs.com/guochunguang/articles/3641008.html
1. Discussão geral
Definição de acordo com http://lucene.apache.org/java/docs/index.html:
O Lucene é uma biblioteca de pesquisa de texto completo eficiente, baseado em Java.
Portanto, antes de entender o Lucene, você deve levar algum tempo para aprender sobre a pesquisa completa de texto.
Então, o que é pesquisa de texto completo? Isso começa com os dados em nossas vidas.
Os dados em nossas vidas são geralmente divididos em dois tipos: dados estruturados e dados não estruturados.
• Dados estruturados: refere -se a dados com formato fixo ou comprimento finito, como bancos de dados, metadados, etc.
• Dados não estruturados: refere -se a dados com comprimento incerto ou nenhum formato fixo, como e -mails, documentos do Word etc.
Obviamente, alguns lugares também mencionarão o terceiro tipo, dados semiestruturados, como XML, HTML etc., quando podem ser processados de acordo com dados estruturados ou texto simples, podem ser extraídos para processar como dados não estruturados.
Os dados não estruturados também são chamados de dados de texto completo.
De acordo com a classificação dos dados, as pesquisas também são divididas em dois tipos:
• Pesquise dados estruturados: por exemplo, pesquisando bancos de dados, use instruções SQL. Por exemplo, pesquisar metadados, como usar o Windows Pesquisar para pesquisar nomes de arquivos, tipos, tempo de modificação etc.
• Pesquise dados não estruturados: por exemplo, a pesquisa do Windows também pode pesquisar conteúdo de arquivo, comando grep no Linux e, por exemplo, o uso do Google e Baidu pode procurar uma grande quantidade de dados de conteúdo.
Existem dois métodos principais para procurar dados não estruturados, ou seja, dados de texto completo:
Uma é a varredura em série: a chamada varredura seqüencial, por exemplo, procurar um arquivo com uma determinada string, é olhar para cada documento por vez. Para cada documento, veja do início ao fim. Se este documento contiver essa string, este documento é o arquivo que estamos procurando e, em seguida, observe o próximo arquivo até que todos os arquivos sejam digitalizados. Se você usa o Windows para pesquisar, também poderá procurar conteúdo de arquivo, mas é bastante lento. Se você tiver um disco rígido 80G, se deseja encontrar um arquivo com uma certa string, tem medo de que você não consiga fazê -lo sem gastar algumas horas. Isso também é da mesma maneira para os comandos Grep no Linux. Você pode pensar que esse método é relativamente primitivo, mas para arquivos com pequenos volumes de dados, esse método ainda é o mais direto e conveniente. Mas para um grande número de arquivos, esse método é muito lento.
Algumas pessoas podem dizer que a varredura seqüencial de dados não estruturados é muito lenta, mas a busca de dados estruturados é relativamente rápida (como os dados estruturados têm uma determinada estrutura, um determinado algoritmo de pesquisa pode ser usado para acelerar a velocidade), portanto, não é suficiente para encontrar uma maneira de fazer com que nossos dados não estruturados tenham uma certa estrutura?
Essa idéia é natural, mas forma a idéia básica de pesquisa de texto completo, que é extrair parte das informações nos dados não estruturados e reorganizá-lo para fazer com que ela tenha uma determinada estrutura e, em seguida, pesquise os dados com uma determinada estrutura, de modo a alcançar o objetivo de pesquisar relativamente rapidamente.
Esta parte da informação extraída dos dados não estruturados e, em seguida, reorganizada, é chamada de índice.
Esta afirmação é relativamente abstrata e é fácil de entender, dando alguns exemplos. Por exemplo, o dicionário, a tabela de pinyin e a tabela de caracteres de verificação radical do dicionário são equivalentes ao índice do dicionário. A explicação de cada caractere é não estruturada. Se o dicionário não tiver uma tabela de sílaba e uma tabela de caracteres de verificação radical, você só poderá escaneá -lo no vasto mar das palavras. No entanto, algumas informações da palavra podem ser extraídas para processamento estruturado. Por exemplo, a pronúncia é relativamente estruturada, dividida em iniciais e finais, e existem apenas alguns tipos que podem ser listados um por um. Portanto, a pronúncia é retirada e organizada em uma certa ordem, e cada pronúncia aponta para o número de páginas da explicação detalhada dessa palavra. Quando pesquisamos, procuramos a pronúncia de acordo com o pinyin estruturado e, em seguida, podemos encontrar nossos dados não estruturados - ou seja, a explicação das palavras.
Esse processo de criação primeiro de um índice e depois pesquisando o índice é chamado de pesquisa de texto completo.
A figura abaixo é de "Lucene em ação", mas não apenas descreve o processo de pesquisa de Lucene, mas também descreve o processo geral de pesquisa de texto completo.
A pesquisa de texto completo geralmente é dividido em dois processos: criação de índice (indexação) e índice de pesquisa (pesquisa).
• Criação do índice: o processo de extração de informações de todos os dados estruturados e não estruturados no mundo real e criando um índice.
• Índice de Pesquisa: é o processo de obtenção da solicitação de consulta do usuário, pesquisando o índice criado e retornando o resultado.
Portanto, existem três questões importantes na pesquisa completa de texto:
1. O que exatamente existe no índice? (Índice)
2. Como criar um índice? (Indexação)
3. Como procurar índices? (Procurar)
Abaixo, estudamos cada problema em sequência.
2. O que exatamente existe no índice
O que exatamente precisa ser armazenado no índice?
Primeiro, vamos ver por que a velocidade de varredura seqüencial é lenta:
De fato, é causado pela inconsistência entre as informações que queremos pesquisar e as informações armazenadas nos dados não estruturados.
As informações armazenadas em dados não estruturados são o que contém strings que cada arquivo contém, ou seja, arquivos conhecidos e é relativamente fácil procurar seqüências de caracteres, ou seja, o mapeamento de arquivo para string. As informações que queremos pesquisar são quais arquivos contêm essa string, ou seja, uma string conhecida e o arquivo desejado, ou seja, o mapeamento de string para arquivo. Os dois são exatamente o oposto. Portanto, se o índice sempre puder salvar o mapeamento de string para arquivo, a velocidade de pesquisa será bastante aprimorada.
Como o mapeamento de uma string para um arquivo é um processo reverso do arquivo para um mapeamento de string, o índice que armazena essas informações é chamado de índice reverso .
As informações salvas do índice reverso são geralmente as seguintes:
Suponha que haja 100 documentos na minha coleção de documentos. Por uma questão de conveniência, numeramos o documento de 1 a 100 e obtemos a seguinte estrutura.
À esquerda, há uma série de cordas chamadas dicionários .
Cada string aponta para uma lista vinculada por documento que contém essa string, chamada de lista de postagem .
Com a indexação, as informações salvas são consistentes com as informações a serem pesquisadas, o que pode acelerar bastante a pesquisa.
Por exemplo, se queremos encontrar um documento que contenha a string "Lucene" e a String "Solr", precisamos apenas das seguintes etapas:
1. Remova a lista de links do documento que contém a string "Lucene".
2. Remova a lista de links do documento que contém a string "Solr".
3. Ao combinar a lista vinculada, encontre arquivos que contêm "Lucene" e "Solr".
Vendo esse lugar, algumas pessoas podem dizer que a pesquisa de texto completo acelera a pesquisa, mas com o processo de indexação extra, os dois podem não ser muito mais rápidos que a digitalização seqüencial. De fato, com o processo de indexação, a recuperação de texto completo não é necessariamente mais rápido que a varredura seqüencial, especialmente quando o volume de dados é pequeno. Criar um índice em uma grande quantidade de dados também é um processo muito lento.
No entanto, ainda há uma diferença entre os dois. A varredura seqüencial é uma varredura sempre, e o processo de criação de um índice só precisa ser de uma vez por todas. Cada pesquisa, o processo de criação de um índice não precisa passar, apenas pesquisando o índice criado.
Essa também é uma das vantagens da pesquisa de texto completo sobre a varredura seqüencial: indexando uma vez, usando várias vezes.
3. Como criar um índice
O processo de criação do índice de pesquisa de texto completo geralmente tem as seguintes etapas:
Etapa 1: Alguns documentos originais a serem indexados (documentos).
Para facilitar a explicação do processo de criação do índice, aqui usamos dois arquivos como exemplos:
Arquivo um: os alunos devem ter permissão para sair com seus amigos, mas não têm permissão para beber cerveja.
Arquivo 2: Meu amigo Jerry foi para a escola para ver seus alunos, mas os encontrou bêbados, o que não é permitido.
Etapa 2: passe o documento original para o tokenizer.
A palavra componente particípio (Tokenizer) fará as seguintes coisas (esse processo é chamado Tokenize):
1. Divida o documento em palavras separadas.
2. Remova os marcos de pontuação.
3. Remova a palavra de parada.
A chamada palavra de parada é algumas das palavras mais comuns em um idioma. Como não tem significado especial, não pode ser uma palavra -chave de pesquisa na maioria dos casos. Portanto, ao criar um índice, essa palavra será removida e o tamanho do índice será reduzido.
Palavra de parada em inglês como: "the", "a", "this", etc.
Para o tokenizador de cada idioma, há um conjunto de palavras de parada.
O resultado obtido após uma palavra particípio (tokenizer) é chamado de elemento da palavra.
Em nosso exemplo, obtemos o seguinte elemento da palavra (token):
"Alunos", "permitidos", "Go", "deles", "amigos", "permitidos", "bebida", "cerveja", "meu", "amigo", "jerry", "foi", "escola", "ver", "seus", "estudantes", "," eles "," bêbados "," permitidos ".
Etapa 3: passe o token obtido para o componente de processamento de idiomas (processador linguístico).
O componente de processamento de idiomas (processador linguístico) lida principalmente com os elementos do Word resultante (tokens).
Para o inglês, o componente de processamento de idiomas (processador linguístico) geralmente faz o seguinte:
1. Mudança para minúsculas (minúsculas).
2. Reduza a palavra em forma de raiz, como "carros" para "carro", etc. Esta operação é chamada: Stemming.
3. Converta palavras em formas raiz, como "dirigido" para "drive", etc. Esta operação é chamada de lematização.
Similaridades e diferenças entre Stemming e Lemmatização:
• Simétrico: Stemming e Lemmatização fazem do vocabulário uma forma raiz.
• Os dois métodos são diferentes:
◦ Sistema adota o método de "redução": "carros" para "carro", "dirigindo" para "drive".
◦Lemmatization Adote o método "Transformação": "dirigir" para "dirigir", "dirigir" para "Drive".
• Os algoritmos dos dois são diferentes:
◦ Sistema adota principalmente algum algoritmo fixo para fazer essa redução, como remover "s", remover "ing" e adicionar "e", alterar "a ação" para "comer" e alterar "a" ação ".
◦Lemmatization usa principalmente o método de salvar um certo dicionário para fazer essa transformação. Por exemplo, existem mapeamentos de "dirigir" para "drive", "dirigir" para "Drive", "AM, é, é" para "estar" no dicionário. Ao fazer uma transformação, basta procurar o dicionário.
• O Stemming e a Lemmatização não são relacionamentos mutuamente exclusivos, mas têm interseções. Algumas palavras podem obter a mesma conversão usando os dois métodos.
O resultado de um processador linguístico é chamado de termo.
Em nosso exemplo, após o processamento da linguagem, a palavra (termo) obtida é a seguinte:
"estudante", "permitir", "ir", "deles", "amigo", "permitir", "beber", "cerveja", "meu", "amigo", "jerry", "ir", "escolar", "ver", "seu" aluno "," encontrar "," eles "," beber "," permitir ".
É precisamente por causa das etapas de processamento de idiomas que a busca pela unidade pode ser pesquisada e a unidade também pode ser pesquisada.
Etapa 4: Passe a palavra obtida (termo) para o componente do índice (indexador).
Indexador faz principalmente o seguinte:
1. Crie um dicionário usando a palavra resultante (termo).
Em nosso exemplo, o dicionário é o seguinte:
Prazo | ID do documento |
Estudante | 1 |
permitir | 1 |
ir | 1 |
Deles | 1 |
amigo | 1 |
permitir | 1 |
Bebida | 1 |
cerveja | 1 |
Meu | 2 |
amigo | 2 |
Jerry | 2 |
ir | 2 |
escola | 2 |
ver | 2 |
dele | 2 |
Estudante | 2 |
Encontrar | 2 |
Eles | 2 |
Bebida | 2 |
permitir | 2 |
2. Classifique o dicionário em ordem alfabética.
Prazo | ID do documento |
permitir | 1 |
permitir | 1 |
permitir | 2 |
cerveja | 1 |
Bebida | 1 |
Bebida | 2 |
Encontrar | 2 |
amigo | 1 |
amigo | 2 |
ir | 1 |
ir | 2 |
dele | 2 |
Jerry | 2 |
Meu | 2 |
escola | 2 |
ver | 2 |
Estudante | 1 |
Estudante | 2 |
Deles | 1 |
Eles | 2 |
• Frequência do documento significa a frequência do documento, indicando quantos arquivos contêm essa palavra (termo).
• Frequência significa a frequência da palavra, o que significa que este arquivo contém várias das palavras (termo).
Portanto, para a palavra "permitir", existem dois documentos que contêm esta palavra (termo), portanto, existem dois documentos seguindo a lista de documentos após a palavra (termo). O primeiro item representa o primeiro documento que contém "permitir", ou seja, o documento 1. Neste documento, "Allow" aparece duas vezes, e o segundo item representa o segundo documento que contém "permitir" é o documento 2. Neste documento, "permitir" aparece uma vez.
Até agora, o índice foi criado e podemos encontrar rapidamente o documento que queremos através dele.
E, no processo, ficamos surpresos ao descobrir que as pesquisas por "drive", "dirigir", "dirigir" e "dirigido" também podem ser encontradas. Porque em nosso índice, "dirigir", "dirigir" e "dirigido", todos serão processados através da linguagem e se tornarão "Drive". Ao pesquisar, se você entrar em "Driving", a declaração de consulta inserida também passará por uma a três etapas aqui e se tornará uma consulta "Drive", para que você possa pesquisar no documento desejado.
3. Como procurar índices?
Parece que podemos anunciar "encontramos a documentação que queremos".
No entanto, o assunto não acabou e verificou -se que era apenas um aspecto da pesquisa completa de texto. Não é? Se apenas um ou dez documentos contiverem as cordas que consultamos, nós as encontramos. Mas e se houver mil ou até milhares? Qual é o arquivo que você mais deseja?
Open Google, por exemplo, se você deseja encontrar um emprego na Microsoft, insere "Microsoft Job" e encontra um total de 22600.000 resultados retornados. Que grande número, foi um problema que, de repente, descobri que não foi encontrado, e muitos também eram um problema. Com tantos resultados, como você coloca os mais relevantes em primeiro lugar?
É claro que o Google faz um bom trabalho, você encontrará empregos na Microsoft de uma só vez. Imagine como seria terrível se os primeiros primeiros fossem "Microsoft faz um bom trabalho na indústria de software ..."
Como encontrar as declarações de consulta mais relevantes entre milhares de resultados de pesquisa como o Google?
Como determinar a correlação entre o documento pesquisado e a declaração de consulta?
Isso está de volta à nossa terceira pergunta: como procurar índices?
A pesquisa é dividida principalmente nas etapas seguintes:
Etapa 1: o usuário insere a declaração de consulta.
As declarações de consulta têm certa sintaxe, assim como a nossa linguagem comum.
Diferentes declarações de consulta têm sintaxe diferentes, como instruções SQL, têm certa sintaxe.
A sintaxe da declaração de consulta varia de acordo com a implementação do sistema de recuperação de texto completo. Os mais básicos incluem: e, ou não, etc.
Por exemplo, a Declaração de entrada do usuário: Lucene e aprendeu não Hadoop.
Explique que o usuário deseja encontrar um documento que contenha Lucene e aprendido, mas não inclui o Hadoop.
Etapa 2: execute análises lexicais, análise gramatical e processamento de idiomas da declaração de consulta.
Como a declaração de consulta possui sintaxe, também é necessário realizar análises gramaticais, análise gramatical e processamento de idiomas.
1. A análise lexical é usada principalmente para identificar palavras e palavras -chave.
Como no exemplo acima, após a análise lexical, as palavras incluem Lucene, aprendizado, Hadoop e palavras -chave incluem e não.
Se uma palavra -chave ilegal for encontrada na análise lexical, ocorrerá um erro. Por exemplo, Lucene AMD aprendeu, onde a AMD está envolvida na consulta como uma palavra comum devido ao erro de ortografia e.
2. A análise de sintaxe forma principalmente uma árvore de sintaxe com base nas regras gramaticais da declaração de consulta.
Se você achar que a declaração de consulta não atende às regras de sintaxe, será relatado um erro. Se Lucene não é e aprendido, ocorrerá um erro.
Como no exemplo acima, a árvore de sintaxe formada por Lucene e aprendida e não Hadoop é a seguinte:
3. O processamento da linguagem é quase o mesmo que o processamento da linguagem durante a indexação.
Por exemplo, aprendida se torna aprendida, etc.
Após a segunda etapa, obtemos uma árvore de sintaxe processada pela linguagem.
Etapa 3: pesquise o índice e obtenha documentos que correspondam à árvore de sintaxe.
Esta etapa é dividida em vários pequenos passos:
1. Primeiro, na tabela de índice reverso, encontre a lista de links de documentos contendo Lucene, Learn, and Hadoop.
2. Em segundo lugar, mescla as listas vinculadas contendo Lucene e aprenda a obter uma lista vinculada de documentos que contém Lucene e Learn.
3. Em seguida, execute uma diferença entre esta lista vinculada e a lista vinculada do documento do Hadoop e remova o documento que contém o Hadoop, de modo a obter uma lista vinculada por documentos que contém Lucene e Learn e não contenha o Hadoop.
4. Esta lista de links de documentos é o documento que estamos procurando.
Etapa 4: Classifique os resultados com base na correlação entre o documento obtido e a declaração de consulta.
Embora, na etapa anterior, obtivemos o documento desejado, os resultados da consulta devem ser classificados por sua correlação com a declaração de consulta e, quanto mais relevantes são, maior será a maior.
Como calcular a correlação entre documentos e declarações de consulta?
É melhor considerar a declaração de consulta como um documento curto e obter a relevância entre os documentos. Se a correlação com pontuações altas for boa, deve ser classificada em primeiro lugar.
Então, como você avalia o relacionamento entre os documentos?
Esta não é uma tarefa fácil. Primeiro, vamos dar uma olhada em julgar o relacionamento entre as pessoas.
Primeiro de tudo, ao olhar para uma pessoa, muitas vezes existem muitos elementos , como personalidade, crenças, hobbies, roupas, altura, gordura e magreza.
Em segundo lugar , para o relacionamento entre as pessoas, diferentes elementos têm importância diferente . Caráter, crença e hobbies podem ser mais importantes. Roupas, altura e gordura podem não ser tão importantes. Portanto, é mais provável que as pessoas com a mesma personalidade, crença e hobbies se tornem bons amigos, mas pessoas com roupas diferentes, altura e gordura e magreza também podem se tornar boas amigas.
Portanto, ao julgar a relação entre as pessoas, devemos primeiro descobrir quais elementos são mais importantes para o relacionamento entre pessoas , como personalidade, crenças e hobbies. Em segundo lugar, precisamos julgar o relacionamento entre esses elementos de duas pessoas , como uma pessoa tem uma personalidade alegre, a outra pessoa tem uma personalidade extrovertida, uma acredita no budismo, a outra acredita em Deus, um adora jogar basquete e o outro adora jogar futebol. Descobrimos que os dois são muito positivos em termos de personalidade, gentil em termos de fé e esportes em termos de hobbies, então o relacionamento entre eles deve ser muito bom.
Vamos dar uma olhada no relacionamento entre empresas.
Primeiro, veja uma empresa, que consiste em muitas pessoas, como gerente geral, gerente, diretor técnico, funcionários comuns, guardas de segurança, porteiros etc.
Em segundo lugar, pessoas diferentes têm importância diferente para o relacionamento entre as empresas . Gerentes gerais, gerentes e diretores técnicos podem ser mais importantes, e funcionários comuns, guardas de segurança e porteiros podem ser menos importantes. Portanto, se o relacionamento entre os gerentes gerais, gerentes e diretores de tecnologia de duas empresas for relativamente bom, as duas empresas tendem a ter um relacionamento melhor. No entanto, mesmo que um funcionário comum tenha um ódio profundo com um funcionário comum de outra empresa, é improvável que isso afete o relacionamento entre as duas empresas.
Portanto, para julgar o relacionamento entre uma empresa, devemos primeiro descobrir quem é mais importante para o relacionamento entre a empresa , como gerente geral, gerente e diretor de tecnologia. Em segundo lugar, precisamos julgar o relacionamento entre essas pessoas , o que não é tão bom quanto os gerentes gerais das duas empresas, os gerentes são colegas aldeões e os diretores de tecnologia já são parceiros empresariais. Descobrimos que o relacionamento entre as duas empresas é bom, seja o gerente geral, o gerente ou o diretor de tecnologia, é bom; portanto, o relacionamento entre as duas empresas deve ser bom.
Depois de analisar os dois relacionamentos, vamos dar uma olhada em como julgar o relacionamento entre os documentos .
Primeiro de tudo, um documento consiste em muitas palavras (termo) , como pesquisa, Lucene, texto completo, isso, um, o que, etc.
Em segundo lugar, o termo diferente tem uma importância diferente para a relação entre documentos . Por exemplo, para este documento, pesquisa, Lucene, texto completo é relativamente importante, isso, um, o que pode ser relativamente sem importância. Portanto, se ambos os documentos contiverem pesquisa, Lucene e FullText, a correlação entre esses dois documentos é melhor. No entanto, mesmo que um documento contenha isso, a, o que e o outro documento não contêm isso, a, o que, ele não pode afetar a correlação entre os dois documentos.
Portanto, para julgar a relação entre documentos, primeiro descubra quais palavras (termo) são as mais importantes para a relação entre documentos, como pesquisa, Lucene, FullText. Em seguida, julgue a relação entre essas palavras (termo).
O processo de descobrir a importância de uma palavra (termo) para um documento é chamado de processo de calcular o peso de uma palavra.
Existem dois parâmetros para calcular o termo peso. A primeira é a palavra (termo) e a segunda é o documento (documento).
O peso de uma palavra indica a importância desta palavra neste documento. Quanto mais importante a palavra (termo) tiver maior o peso (peso a termo) e, portanto, ela desempenhará um papel maior no cálculo da correlação entre os documentos.
O processo de julgamento da relação entre palavras (termo) e, assim, a obtenção de correlações de documentos é usada para usar um algoritmo do modelo de espaço vetorial (modelo de espaço vetorial).
Vamos analisar esses dois processos com cuidado:
1. O processo de cálculo do peso (peso a prazo).
Existem dois fatores principais que influenciam a importância de uma palavra (termo) em um documento:
• Frequência de termo (TF): é quantas vezes esse termo aparece neste documento. Quanto maior o TF, mais importante isso significa.
• Frequência de documentos (DF): isto é, quantos documentos contêm termo secundário. Quanto maior o DF, menos importante isso significa.
É fácil de entender? Quanto mais vezes a palavra (termo) aparecer no documento, mais importante é para o documento. Por exemplo, a palavra "pesquisa" aparece muitas vezes neste documento, o que significa que este documento fala principalmente sobre esse aspecto. No entanto, em um documento em inglês, se isso aparecer com mais frequência, significa que é mais importante? Não, isso é ajustado pelo segundo fator. O segundo fator mostra que quanto mais documentos contêm essa palavra (termo), significa que a palavra (termo) é muito comum e não é suficiente para distinguir esses documentos; portanto, menos importante é.
Esta também é a tecnologia que aprendemos. Para os próprios programadores, quanto mais profunda eles dominam essa tecnologia, melhor (quanto mais profundos eles dominam significa que quanto mais tempo eles gastam, maior o TF) e mais competitivos eles são ao procurar emprego. No entanto, para todos os programadores, quanto menos pessoas que entendem essa tecnologia, melhor (quanto menos pessoas que a entendem) e quanto mais competitivas elas estão em encontrar um emprego. Esta é a razão pela qual o valor humano reside na irreplaceabilidade.
Uma vez que a verdade é entendida, vamos dar uma olhada na fórmula:
Esta é apenas uma implementação típica simples da fórmula de cálculo de peso a termo. As pessoas que implementam o sistema de recuperação de texto completo terão sua própria implementação, e o Lucene é um pouco diferente disso.
2. O processo de julgar a relação entre termo e obter correlação de documentos, ou seja, o algoritmo (VSM) do modelo de espaço vetorial.
Consideramos documentos como uma série de palavras (termo), cada palavra (termo) tem um peso (peso a termo) e palavras diferentes (termo) afetam o cálculo de pontuação da relevância do documento com base em seu próprio peso no documento.
Portanto, consideramos o peso do termo neste documento como um vetor.
Document = {termo1, termo2,…, termo n}
Documento vetor = {peso1, peso2, ..., peso n}
Da mesma forma, consideramos a declaração de consulta como um documento simples e também o expressamos em vetores.
Query = {termo1, termo 2,…, termo n}
Vetor de consulta = {peso1, peso2, ..., peso n}
Colocamos todos os vetores de documentos pesquisados e vetores de consultas em um espaço n-dimensional, e cada palavra (termo) é unidimensional.
Como mostrado na imagem:
Acreditamos que quanto menor o ângulo entre dois vetores, maior a correlação.
Portanto, calculamos o valor cosseno do ângulo incluído como uma pontuação de correlação. Quanto menor o ângulo, maior o valor cosseno, maior a pontuação e maior a correlação.
Algumas pessoas podem pedir que as declarações de consulta geralmente sejam muito curtas e contenham muito poucas palavras (termo); portanto, as dimensões do vetor de consulta são muito pequenas, enquanto o documento é muito longo, contém muitas palavras (termo) e as dimensões do vetor de documento são muito grandes. Por que as dimensões de ambos estão no seu gráfico N?
Aqui, como você deseja colocá -lo no mesmo espaço vetorial, as dimensões naturais são as mesmas. Diferente ao mesmo tempo, pegue a união dos dois. Se não houver palavra (termo), o peso (peso termo) é 0.
A fórmula de pontuação de correlação é a seguinte:
Por exemplo, existem 11 termos na declaração de consulta e três documentos são pesquisados. Os respectivos pesos (peso a termo) são os seguintes.
T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 | T11 | |
D1 | 0 | 0 | .477 | 0 | .477 | .176 | 0 | 0 | 0 | .176 | 0 |
D2 | 0 | .176 | 0 | .477 | 0 | 0 | 0 | 0 | .954 | 0 | .176 |
D3 | 0 | .176 | 0 | 0 | 0 | .176 | 0 | 0 | 0 | .176 | .176 |
Q | 0 | 0 | 0 | 0 | 0 | .176 | 0 | 0 | .477 | 0 | .176 |
Portanto, as pontuações de correlação entre os três documentos e a declaração de consulta são calculadas como:
Portanto, o documento 2 tem a maior correlação, primeiro retorno, seguido pelo documento 1 e, finalmente, o documento 3.
Até agora, podemos encontrar a documentação que mais queremos.
Dito tanto, ainda não entrei no Lucene, mas é apenas a teoria básica na recuperação de informações. No entanto, depois de olharmos para o Lucene, descobriremos que o Lucene é uma prática básica dessa teoria básica. Portanto, nos artigos que analisam o Lucene, frequentemente veremos a aplicação da teoria acima no Lucene.
Antes de entrar no Lucene, um resumo do processo de criação e pesquisa acima do índice é como mostrado na figura:
Esta figura refere -se ao artigo "Lucene, o mecanismo de pesquisa de texto completo do código -fonte aberto" em http://www.lucene.com.cn/about.htm
1. Processo de indexação:
1) Há uma série de arquivos indexados
2) O arquivo indexado é analisado sintaxe e o processamento de idiomas para formar uma série de palavras (termo).
3) Crie uma tabela de dicionário e índice reverso através da indexação.
4) Escreva o índice no disco rígido através do armazenamento de índices.
2. Processo de pesquisa:
a) Declaração de consulta de entrada do usuário.
b) Uma série de palavras (termo) é obtida através da análise gramatical e da análise da linguagem da declaração de consulta.
c) Obtenha uma árvore de consulta através da análise de sintaxe.
d) Leia o índice na memória através do armazenamento de índices.
e) Use a árvore de consulta para pesquisar o índice, para obter a lista de links de documentos para cada palavra (termo), enviar a lista de links de documentos e obter o documento de resultado.
f) Classifique o documento de resultado pesquisado para a relevância da consulta.
g) Retorne o resultado da consulta ao usuário.
2. Classifique o dicionário em ordem alfabética.
Prazo | ID do documento |
permitir | 1 |
permitir | 1 |
permitir | 2 |
cerveja | 1 |
Bebida | 1 |
Bebida | 2 |
Encontrar | 2 |
amigo | 1 |
amigo | 2 |
ir | 1 |
ir | 2 |
dele | 2 |
Jerry | 2 |
Meu | 2 |
escola | 2 |
ver | 2 |
Estudante | 1 |
Estudante | 2 |
Deles | 1 |
Eles | 2 |
3. Mesclar as mesmas palavras (termo) na lista de links reverso do documento (lista de postagem).
Nesta tabela, existem várias definições: