O plug -in TNTSearch é para o Grav CMS. Poderoso mecanismo de pesquisa de texto completo baseado em indexação, alimentado pela biblioteca TNTSearch, que fornece pesquisas rápidas de conteúdo de gravação baseadas em Ajax. Este plug -in é altamente flexível, permitindo índices de dados de conteúdo arbitrário, bem como modelos de galhos personalizados para oferecer a oportunidade de indexar os tipos de página modular e outros tipos de página dinâmica. O TNTSearch fornece CLI, bem como administração e re-indexamento baseadas em administrador, bem como uma ferramenta de pesquisa front-end de Ajax embutida.
NOTA: O TNTSearch versão 3.0.0 agora requer Grav 1.6.0 ou mais recente para funcionar, pois utiliza novas funcionalidades não disponíveis nas versões anteriores.

A instalação do plug -in de pesquisa TNT pode ser feita de duas maneiras. O método de instalação GPM (GRAV Package Manager) permite instalar rápida e facilmente o plug -in com um comando simples de terminal, enquanto o método manual permite fazê -lo através de um arquivo zip.
A maneira mais simples de instalar este plug -in é através do GPM (GPM) do Grav Package (GPM) através do terminal do seu sistema (também chamado de linha de comando). Da raiz do seu tipo de instalação grave:
bin/gpm install tntsearch
Isso instalará o plug -in de pesquisa TNT no seu diretório /user/plugins no Grav. Seus arquivos podem ser encontrados em /your/site/grav/user/plugins/tntsearch .
Além dos requisitos de gravação padrão, este plug -in possui alguns requisitos extras. Devido à natureza complexa de um mecanismo de pesquisa, o TNTSearch utiliza um banco de dados de arquivos planos para armazenar sua lista de palavras, bem como o mapeamento para o conteúdo. Isso é tratado automaticamente pelo plug -in, mas você precisa garantir que tenha o seguinte instalado no seu servidor:
| O PHP por padrão vem com o PDO e a grande maioria dos sistemas baseados em Linux já vem com SQLite.
Na verdade, o SQLite vem pré-instalado no seu Mac, mas você pode atualizá-lo para a versão mais recente com Homebrew:
Instale o homebrew
$ /usr/bin/ruby -e " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) "Instale o sqlite com homebrew
$ brew install sqliteFaça o download da versão apropriada do SQLite na página SQLITE Downloads.
Extraia o arquivo zip baixado e execute o sqlite3.exe executável.
Antes de configurar este plug -in, você deve copiar o user/plugins/tntsearch/tntsearch.yaml para user/config/plugins/tntsearch.yaml e editar apenas essa cópia.
Aqui está a configuração padrão e uma explicação das opções disponíveis:
enabled : true
search_route : ' /search '
query_route : ' /s '
built_in_css : true
built_in_js : true
built_in_search_page : true
enable_admin_page_events : true
search_type : auto
fuzzy : false
distance : 2
phrases : true
stemmer : ' no '
display_route : true
display_hits : true
display_time : true
live_uri_update : true
limit : 20
min : 3
snippet : 300
index_page_by_default : true
scheduled_index :
enabled : false
at : ' 0 */3 * * * '
logs : ' logs/tntsearch-index.out '
filter :
items :
- [email protected]
powered_by : true
search_object_type : Grav As opções de configuração são as seguintes:
enabled - Ative ou desative o plug -in instantaneamentesearch_route - A rota usada para a página de pesquisa embutidaquery_route - a rota usada pelo formulário de pesquisa para consultar o mecanismo de pesquisabuilt_in_css - ativar ou desativar o estilo CSS integradobuilt_in_js - Ativar ou desativar o JavaScript embutidobuilt_in_search_page - Ativar ou desativar a página de pesquisa internaenable_admin_page_events - Ativar ou desativar os eventos da página que ocorrem on-save para adicionar/atualizar/remover a página no índicesearch_type - pode ser um desses tipos:basic - correspondência de string padrãoboolean - suporta or ou minus . por exemplo, foo -barauto - detecta automaticamente se o uso basic ou booleanfuzzy - corresponde se as palavras forem 'próximas', mas não necessariamente correspondentes exatosdistance - Levenshtein Distância da pesquisa difusa. Ele representa a quantidade de caracteres que precisam ser alterados, removidos ou adicionados em uma palavra para corresponder à palavra -chave de pesquisa. Aumentar a distância produz mais resultados de pesquisa, mas diminui a precisão da pesquisa.phrases - lida automaticamente em suportes de frasesstemmer - pode ser um desses tipos:no - sem hastearabic - Língua Árabecroatian - Língua Croatagerman - idioma alemãoitalian - idioma italianoporter - Porter Stemmer para a língua inglesaportuguese - Língua Portuguesarussian - idioma russoukrainian - Língua Ucranianadisplay_route - Exiba a rota nos resultados da pesquisadisplay_hits - exibir o número de acertos nos resultados da pesquisadisplay_time - exiba o tempo de execução nos resultados da pesquisalive_uri_update - Quando built_in_js está ativado, atualiza ao vivo a barra URI na página search_routelimit - quantidade máxima de resultados a serem mostradosmin - Mininum, quantidade de caracteres digitados antes de executar a pesquisasnippet - quantidade de caracteres para visualizar um item de resultadoindex_page_by_default - Caso todas as páginas sejam indexadas por padrão, a menos que o FrontMatter substituascheduled_index - Novo trabalho de índice programado. Desativado por padrão, quando habilitado, padrão para executar a cada 3 horas, e os resultados da saída para logs/tntsearch-index.outfilter - um filtro de coleções de páginas que permite escolher páginas específicas para indexar por meio de uma consulta de coleçãopowered_by - Exiba o texto alimentado por TNTSearchsearch_object_type - Permite que as classes personalizadas substituam o suporte padrão da página de gravação . Isso permite recursos de pesquisa completamente personalizados para qualquer tipo de dados. O TNTSearch conta com o seu conteúdo sendo indexado no banco de dados do índice SQLite antes que qualquer dúvida possa ser feita. Isso é muito semelhante a outros mecanismos de pesquisa, como Elasticsearch, Solr, Lucene etc., mas usa uma biblioteca de mecanismos de pesquisa de pesquisa relativamente simplesmente PHP para conseguir isso com pouca configuração e sem aborrecimentos.
O primeiro passo após a instalação do plug -in é indexar seu conteúdo. Existem várias maneiras de conseguir isso.
Primeiro, se você puder acessar a CLI ou optar por não usar o plug-in de administrador, você pode usar o comando interno da CLI:
$ bin/plugin tntsearch indexIsso digitalizará todas as suas páginas e indexará o conteúdo. Você deve ver alguma saída como esta:
Re-indexing Search
Added 1 /
Added 2 /blog/classic-modern-architecture
Added 3 /blog/daring-fireball-link
Added 4 /blog/focus-and-blur
Added 5 /blog/just-some-text-today
Added 6 /blog/london-industry
Added 7 /blog/random-thoughts
Added 8 /blog/sunshine-in-the-hills
Added 9 /blog/the-urban-jungle
Total rows 9
Done.Isso indica uma indexação bem -sucedida do seu conteúdo.
Se você estiver usando o plug -in Admin, poderá indexar seu conteúdo diretamente do plug -in. O TNTSearch adiciona um novo ícone de bandeja rápida que permite criar um novo índice ou reiniciar todo o seu conteúdo de maneira rápida e conveniente com um único clique.

Como alternativa, você pode navegar para a seção de configuração do TNTSearch e clicar no botão Index Content :

NOTA: Que qualquer página que use um atributo de cabeçalho da página de
redirectserá ignorada durante a indexação.
Você pode pular explicitamente uma página que está no filtro de índice adicionando este YAML ao cabeçalho da página:
tntsearch:
index: false
Com a nova versão 3.0 do TNTSearch, o suporte foi adicionado para vários idiomas (Grav 1.6 necessário). Internamente, isso significa que, em vez disso, armazenam o índice como user:://data/tntsearch/grav.index , vários índices são criados por idioma configurado no Grav. Por exemplo, se você definiu os idiomas suportados como ['en', 'fr', 'de'] , então quando você executa um índice, você obterá três arquivos: en.index , fr.index e de.index . Ao consultar a linguagem ativa apropriada, determina qual índice é consultado. Por exemplo, executar a pesquisa em uma página chamada /fr/search resultará no banco de dados fr.index a ser usado e os resultados franceses a serem retornados.
A indexação do NOTE levará mais tempo, dependendo do número de idiomas que você suporta, pois o TNTSearch precisa indexar cada página em cada idioma.
NOTA: Embora os caracteres acentuados sejam suportados nesta versão, atualmente não há suporte na biblioteca TNTSearch subjacente para combinar com os caracteres não acentuados com os acentuados, portanto, as correspondências exatas são necessárias.
Um dos grandes novos recursos do Grav 1.6 é o agendador incorporado que permite que a funcionalidade fornecida por plug-in seja executada periodicamente. O TNTSearch é um ótimo caso de uso para esse recurso, pois permite que um trabalho de indexação seja programado para ser executado a cada poucas horas sem a necessidade de manter manualmente as coisas em sincronia. Existem algumas opções que permitem configurar esse recurso.
Primeiro, observe que essa funcionalidade do agendador é desativada por padrão, então você deve primeiro ativar a funcionalidade do agendador nas configurações do plug -in do TNTSearch. Depois disso, você pode configurar com que frequência o trabalho de indexação deve ser executado. O padrão é a cada 3 horas. Por fim, você pode configurar para onde qualquer saída de indexação é registrada.
Depois de ter um índice, o TNTSearch usa os eventos de administração para obter entradas de cate , u pdate e D Elete quando você edita as páginas. Se o seu índice parece estar fora de sincronia, você pode simplesmente reindexar todo o seu site.
Por padrão, o plug -in do TNTSearch indexará o title e o content da sua página. Isso geralmente é suficiente para a maioria dos casos, mas há situações em que você pode indexar mais campos. O plug -in fornece um exemplo disso ouvindo o evento onTNTSearchIndex :
public static function getSubscribedEvents ()
{
return [
' onTNTSearchIndex ' => [ ' onTNTSearchIndex ' , 0 ]
];
}
public function onTNTSearchIndex ( Event $ e )
{
$ fields = $ e [ ' fields ' ];
$ page = $ e [ ' page ' ];
if ( isset ( $ page -> header ()-> author )) {
$ fields -> author = $ page -> header ()-> author ;
}
}Isso permite que você adicione um autor aos campos indexados se ele estiver definido na página FrontMatter. Você pode adicionar seus próprios campos personalizados com um plug -in muito simples que ouve este evento.
O plug -in TNTSearch geralmente usa o conteúdo renderizado para indexar. No entanto, existem situações em que sua página é realmente uma página modular ou construída a partir de outras páginas em que não há conteúdo real na página, ou o conteúdo não é representativo da página como um todo. Para combater essa situação, você pode fornecer modelos personalizados em seu tema que o TNTSearch pode usar para renderizar o conteúdo antes da indexação.
Por exemplo, digamos que temos uma página inicial criada a partir de algumas sub-páginas modulares com um pouco de conteúdo abaixo, é chamado de home.md , então usa um arquivo home.html.twig nos templates/ pasta do seu tema. Você pode criar uma versão simplificada deste modelo e salvá -lo como templates/tntsearch/home.html.twig . Para este exemplo, este modelo se parece com o seguinte:
{% for module in page. collection () %}
< p >
{{ module . content | raw }}
</ p >
{% endfor %}
{{ page . content | raw }}Como você pode ver, isso simplesmente garante que as páginas do módulo, conforme definidas na coleção da página, sejam exibidas, o conteúdo real da página é exibido.
Para instruir o TNTSearch a indexar com este modelo, em vez de apenas usar o conteúdo da página por si só, basta adicionar uma entrada no home.md frontmatter:
tntsearch :
template : ' tntsearch/home ' O plug-in TNTSearch para Grav vem com uma página de consulta interna que é acessível através da rota /search por padrão. Esta página de pesquisa é um campo de entrada simples que executará uma consulta Ajax como você-tipo . Como o TNTSearch é tão rápido, você obtém uma resposta de pesquisa em tempo real de maneira semelhante a uma pesquisa no Google. Além disso, os resultados são retornados já destacados para os termos correspondentes.
Você também pode testar a pesquisa com a CLI:
$ bin/plugin tntsearch query ipsum
{
"number_of_hits" : 3 ,
"execution_time" : " 2.101 ms " ,
"hits" : [
{
"link" : " / blog / classic-modern-architecture " ,
"title" : " Classic Modern Architecture " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
},
{
"link" : " / blog / focus-and-blur " ,
"title" : " Focus and Blur " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
},
{
"link" : " / blog / london-industry " ,
"title" : " London Industry at Night " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
}
]
} Se uma página de gravação física for encontrada para a rota /search , o TNTSearch o usará em vez da página fornecida pelo plug -in. Isso permite que você adicione facilmente conteúdo à sua página de pesquisa conforme necessário. Se você deseja personalizar a saída HTML real, basta copiar os templates/search.html.twig do plug -in para o seu tema e personalizá -lo.
O campo de entrada real também pode ser modificado conforme necessário para copiar e editar os templates/partials/tntsearch.html.twig no seu tema e modificá -lo.
Por padrão, o plug -in TNTSearch para Grav, a resposta JSON é enviada com a seguinte estrutura:
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"hits" : [
{
"link" : " /page-a " ,
"title" : " Title A " ,
"content" : " highlighted-summary "
},
{
"link" : " /page-b " ,
"title" : " Title B " ,
"content" : " highlighted-summary "
},
{
"link" : " /page-c " ,
"title" : " Title C " ,
"content" : " highlighted-summary "
}
]
}Há casos em que essa saída não é desejável ou precisa ser alterada. A TNTSearch realmente fornece um evento de plug -in para permitir que você manipule este formato. Um exemplo disso pode ser visto abaixo:
public static function getSubscribedEvents () {
return [
' onTNTSearchQuery ' => [ ' onTNTSearchQuery ' , 1000 ],
];
}
public function onTNTSearchQuery ( Event $ e )
{
$ query = $ this -> grav [ ' uri ' ]-> param ( ' q ' );
if ( $ query ) {
$ page = $ e [ ' page ' ];
$ query = $ e [ ' query ' ];
$ options = $ e [ ' options ' ];
$ fields = $ e [ ' fields ' ];
$ fields -> results [] = $ page -> route ();
$ e -> stopPropagation ();
}
} As coisas importantes a serem observadas são o valor de ordem 1000 para garantir que esse evento seja executado antes do evento padrão no arquivo plug-in tntsearch.php . O método de evento real simplesmente define uma matriz de resultados nos campos com uma rota, resultando em:
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"results" : [ '/page-a', '/page-b', '/page-c' ]
} O plug-in TNTSearch também pode ser usado para renderizar a pesquisa como suspenso e não em uma página padrão. Para fazer isso, você precisa embed a pesquisa parcial e substituí -la para atender às suas necessidades. Você pode simplesmente adicionar isso ao seu tema onde quiser ter uma caixa de pesquisa suspensa AJAX:
{% embed ' partials/tntsearch.html.twig ' with { limit : 10 , snippet : 150 , min : 3 , search_type : ' auto ' , dropdown : true } %}{% endembed %} Aqui incorporamos o parcial padrão, mas substituímos as options , passando -as na declaração with . É importante observar que o dropdown: true deve ser definido para ser interpretado como suspenso.
Este plug -in não seria possível sem a incrível biblioteca TNTSearch para PHP. Certifique -se de estrelar esse projeto no Github.