TNTearch 플러그인은 Grav CMS 용입니다. 빠른 Ajax 기반 Grav 컨텐츠 검색을 제공하는 TNTearch 라이브러리로 구동되는 강력한 색인 기반의 전체 텍스트 검색 엔진. 이 플러그인은 모듈 식 및 기타 동적 페이지 유형을 색인화 할 수있는 기회를 제공하기 위해 임의의 컨텐츠 데이터의 인덱스를 허용하는 매우 유연합니다. TNTearch는 관리 기반 관리 및 재 인덱싱뿐만 아니라 CLI뿐만 아니라 AJAX 기반 프론트 엔드 검색 도구를 제공합니다.
참고 : TNTearch 버전 3.0.0은 이제 이전 버전에서 사용할 수없는 새로운 기능을 사용할 수 있도록 Grav 1.6.0 또는 최신 기능이 필요합니다.

TNT 검색 플러그인 설치는 두 가지 방법 중 하나로 수행 할 수 있습니다. GPM (Grav Package Manager) 설치 방법을 사용하면 간단한 터미널 명령으로 플러그인을 빠르고 쉽게 설치할 수 있으며 설명서 메소드를 사용하면 zip 파일을 통해이를 수행 할 수 있습니다.
이 플러그인을 설치하는 가장 간단한 방법은 시스템 터미널 (명령 줄이라고도 함)을 통해 GRPM (Grav Package Manager)을 통해입니다. Grav 설치 유형의 루트에서 :
bin/gpm install tntsearch
TNT 검색 플러그인을 Grav 내 /user/plugins 디렉토리에 설치합니다. 파일은 /your/site/grav/user/plugins/tntsearch 에서 찾을 수 있습니다.
표준 GRAV 요구 사항 외에이 플러그인에는 몇 가지 추가 요구 사항이 있습니다. 검색 엔진의 복잡한 특성으로 인해 TNTearch는 플랫 파일 데이터베이스를 사용하여 워드리스트를 저장하고 컨텐츠 매핑을 저장합니다. 이것은 플러그인에 의해 자동으로 처리되지만 서버에 다음을 설치해야합니다.
| 기본적으로 PHP는 PDO 와 함께 제공되며 대부분의 Linux 기반 시스템에는 이미 SQLITE가 제공됩니다.
SQLITE는 실제로 Mac에 사전 설치되지만 Homebrew를 사용하여 최신 버전으로 업그레이드 할 수 있습니다.
홈브류를 설치하십시오
$ /usr/bin/ruby -e " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) "Homebrew로 sqlite를 설치하십시오
$ brew install sqlitesqlite 다운로드 페이지에서 적절한 버전의 sqlite를 다운로드하십시오.
다운로드 된 zip 파일을 추출하고 sqlite3.exe 실행 파일을 실행하십시오.
이 플러그인을 구성하기 전에 user/plugins/tntsearch/tntsearch.yaml user/config/plugins/tntsearch.yaml 에 복사하고 해당 사본 만 편집해야합니다.
다음은 기본 구성 및 사용 가능한 옵션에 대한 설명입니다.
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 구성 옵션은 다음과 같습니다.
enabled - 플러그인을 즉시 활성화 또는 비활성화하십시오search_route 내장 검색 페이지에 사용되는 경로query_route 검색 양식에서 검색 엔진을 쿼리하는 데 사용되는 경로built_in_css 내장 CSS 스타일을 활성화 또는 비활성화합니다built_in_js 내장 JavaScript를 활성화 또는 비활성화합니다built_in_search_page 내장 검색 페이지를 활성화 또는 비활성화합니다enable_admin_page_events 인덱스에서 페이지를 추가/업데이트/제거하기 위해 on-save 발생하는 페이지 이벤트를 활성화 또는 비활성화합니다.search_type 이러한 유형 중 하나 일 수 있습니다.basic - 표준 문자열 일치boolean - 지원 or minus . 예를 들어 foo -barauto - basic 또는 boolean 사용 여부를 자동으로 감지합니다.fuzzy - 단어가 '닫기'이지만 반드시 정확히 일치하는 경우 일치합니다.distance - 퍼지 검색의 Levenshtein 거리. 검색 키워드와 일치하도록 단어에 변경, 제거 또는 추가 해야하는 문자의 양을 나타냅니다. 거리를 늘리면 더 많은 검색 결과가 생성되지만 검색의 정확도가 줄어 듭니다.phrases - 구절 지원을 자동으로 처리합니다stemmer 이러한 유형 중 하나 일 수 있습니다.no - 줄무늬가 없습니다arabic - 아랍어croatian - 크로아티아 언어german - 독일어italian - 이탈리아어porter - 영어를위한 포터 스티머portuguese - 포르투갈어russian - 러시아어ukrainian - 우크라이나어display_route 검색 결과에 경로를 표시합니다display_hits 검색 결과의 히트 수를 표시합니다.display_time 검색 결과에서 실행 시간 표시live_uri_update built_in_js 활성화되면 Live는 search_route 페이지에서 URI 바를 업데이트합니다.limit - 표시 될 최대 결과량min - 검색을 수행하기 전에 입력 한 문자의 양snippet - 결과 항목 미리보기를위한 문자 양index_page_by_default 프론트 매터가 재정의하지 않는 한 모든 페이지가 기본적으로 인덱싱되어야합니다.scheduled_index 새로운 예정된 인덱스 작업. 기본적으로 비활성화, 3 시간마다 기본값을 사용하고 logs/tntsearch-index.out 로 결과를 출력합니다.filter - 수집 쿼리를 통해 인덱스 할 특정 페이지를 선택할 수있는 페이지 수집 필터powered_by 파워드 바이 TNTearch 텍스트를 표시합니다search_object_type 사용자 정의 클래스가 기본 그럼 페이지 지원을 무시할 수 있도록합니다. 이를 통해 모든 데이터 유형에 대해 완전히 사용자 정의 검색 기능을 수행 할 수 있습니다. TNTearch는 검색 쿼리를 만들기 전에 SQLITE Index 데이터베이스에 인덱싱되는 콘텐츠에 의존합니다. 이는 Elasticsearch, Solr, Lucene 등과 같은 다른 검색 엔진과 매우 유사하지만 비교적 간단하게 PHP 검색 엔진 라이브러리 TNTearch 라이브러리를 사용하여 설정이 거의없고 번거 로움없이이를 달성합니다.
플러그인을 설치 한 후 첫 번째 단계는 콘텐츠를 색인하는 것입니다. 이를 달성 할 수있는 몇 가지 방법이 있습니다.
먼저 CLI에 액세스 할 수 있거나 관리자 플러그인을 사용하지 않도록 선택하면 내장 CLI 명령을 사용할 수 있습니다.
$ bin/plugin tntsearch index이렇게하면 모든 페이지를 스캔하고 컨텐츠를 색인합니다. 다음과 같은 출력이 표시됩니다.
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.이는 콘텐츠의 성공적인 색인을 나타냅니다.
관리자 플러그인을 사용하는 경우 플러그인에서 직접 콘텐츠를 색인 할 수 있습니다. TNTearch는 새로운 Quick-Tray 아이콘을 추가하여 단일 클릭으로 빠르고 편리하게 새 인덱스를 만들거나 모든 콘텐츠를 빠르고 다시 표시 할 수 있습니다.

또는 TNTearch 구성 섹션으로 이동하여 Index Content 버튼을 클릭 할 수 있습니다.

참고 :
redirect페이지 헤더 속성을 사용하는 모든 페이지는 인덱싱 중에 건너 뜁니다.
이 YAML을 페이지 헤더에 추가하여 인덱스 필터에있는 페이지를 명시 적으로 건너 뛸 수 있습니다.
tntsearch:
index: false
새로운 3.0 버전의 TNTearch에서 여러 언어에 대한 지원이 추가되었습니다 (Grav 1.6 필수). 내부적으로 이것은 색인을 user:://data/tntsearch/grav.index 는 Grav에서 구성된 언어마다 여러 인덱스가 생성됩니다. 예를 들어, 지원되는 언어를 ['en', 'fr', 'de'] 로 설정 한 다음 인덱스를 수행하면 en.index , fr.index 및 de.index 의 세 가지 파일이 나타납니다. 적절한 활성 언어 를 쿼리 할 때 어떤 색인이 쿼리되는지 결정합니다. 예를 들어, /fr/search 라는 페이지에서 검색을 수행하면 fr.index 데이터베이스가 사용되고 프랑스 결과가 반환됩니다.
참고 인덱싱은 TNTearch가 각 언어로 각 페이지를 색인해야하므로 지원하는 언어 수에 따라 더 오래 걸립니다.
참고 :이 릴리스에서는 악센트가있는 캐릭터가 지원되지만 현재 기본 TNTearch 라이브러리에는 비 계급 문자와 악센트가없는 캐릭터와 일치하는 지원이 없으므로 정확한 일치가 필요합니다.
Grav 1.6의 새로운 기능 중 하나는 플러그인 제공 기능을 주기적으로 실행할 수있는 내장 스케줄러 입니다. TNTearch는이 기능에 적합한 사용 사례입니다.이 기능은 인덱싱 작업을 수동으로 동기화 할 필요없이 몇 시간마다 실행할 수 있도록합니다. 이 기능을 구성 할 수있는 몇 가지 옵션이 있습니다.
먼저이 스케줄러 기능이 기본적으로 비활성화되므로 먼저 TNTearch 플러그인 설정에서 스케줄러 기능을 활성화해야합니다. 그 후 인덱싱 작업이 얼마나 자주 실행되는지 구성 할 수 있습니다. 기본값은 3 시간마다입니다. 마지막으로 인덱싱 출력이 기록되는 위치를 구성 할 수 있습니다.
인덱스가 있으면 TNTearch는 페이지를 편집 할 때 관리 이벤트, U PDate 및 D Elete 인덱스 항목을 사용합니다. 인덱스가 동기화되지 않은 것처럼 보이면 전체 사이트 전체를 다시 알게 될 수 있습니다.
기본적으로 TNTearch 플러그인은 페이지의 title 과 content 색인합니다. 이것은 일반적으로 대부분의 경우 충분하지만 더 많은 필드를 색인화하려는 상황이 있습니다. 플러그인은 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 ;
}
}이를 통해 페이지 프론트 매스터에 설정된 경우 인덱스 필드에 저자를 추가 할 수 있습니다. 이 이벤트를 듣는 매우 간단한 플러그인으로 자신의 사용자 정의 필드를 추가 할 수 있습니다.
TNTearch 플러그인은 일반적으로 렌더링 된 컨텐츠를 사용하여 색인을 사용합니다. 그러나 페이지가 실제로 모듈 식 페이지이거나 페이지에 실제 콘텐츠가없는 다른 페이지에서 구축 된 상황이 있거나 컨텐츠가 전체 페이지를 대표하지 않는 상황이 있습니다. 이 상황에 맞서기 위해 TNTearch가 인덱싱하기 전에 컨텐츠를 렌더링하는 데 사용할 수있는 테마에서 사용자 정의 템플릿을 제공 할 수 있습니다.
예를 들어, 아래에 약간의 콘텐츠가있는 몇 개의 모듈 식 하위 페이지에서 구축 된 홈페이지가 있다고 가정 해보십시오. home.md 라고 불리우므로 테마의 templates/ 폴더에 home.html.twig 파일을 사용합니다. 이 템플릿의 단순화 된 버전을 작성하여 templates/tntsearch/home.html.twig 로 저장할 수 있습니다. 이 예에서는이 템플릿이 다음과 같습니다.
{% for module in page. collection () %}
< p >
{{ module . content | raw }}
</ p >
{% endfor %}
{{ page . content | raw }}보시다시피이면 페이지 모음에 정의 된 모듈 페이지가 표시되도록하면 실제 페이지 컨텐츠가 표시됩니다.
TNTearch에게 페이지 컨텐츠 자체를 사용하지 않고이 템플릿으로 색인을 인덱싱하도록 지시하려면 home.md FrontMatter에 항목을 추가하면됩니다.
tntsearch :
template : ' tntsearch/home ' Grav 용 TNTearch 플러그인에는 기본적으로 /search 경로를 통해 액세스 할 수있는 내장 쿼리 페이지가 제공됩니다. 이 검색 페이지는 ajax query as-you-type를 수행하는 간단한 입력 필드입니다. TNTearch가 너무 빠르기 때문에 Google 검색과 비슷한 방식으로 실시간 검색 응답을 얻을 수 있습니다. 또한 결과는 일치하는 용어로 이미 강조 표시됩니다.
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... "
}
]
} /search 경로에 물리적 그라운드 페이지가 발견되면 TNTearch는 플러그인에서 제공 한 페이지 대신 해당을 사용합니다. 이를 통해 필요한대로 검색 페이지에 콘텐츠를 쉽게 추가 할 수 있습니다. 실제 HTML 출력을 사용자 정의하려면 templates/search.html.twig 플러그인에서 테마로 복사하여 사용자 정의하십시오.
실제 입력 필드는 templates/partials/tntsearch.html.twig 파일을 테마로 복사하고 편집하여 필요에 따라 수정할 수도 있습니다.
기본적으로 Grav의 TNTearch 플러그인을 기본적으로, 응답 JSON은 다음 구조로 전송됩니다.
{
"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 "
}
]
}이 출력이 바람직하지 않거나 변경 해야하는 사례가 있습니다. TNTearch는 실제로이 형식을 조작 할 수있는 플러그인 이벤트를 제공합니다. 이에 대한 예는 다음과 같습니다.
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 ();
}
} 주목해야 할 중요한 사항은 tntsearch.php 플러그인 파일의 기본 이벤트 전에이 이벤트가 실행되도록하기위한 1000 주문 값입니다. 실제 이벤트 메소드는 단순히 필드의 결과 배열을 경로로 설정하여 다음과 같습니다.
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"results" : [ '/page-a', '/page-b', '/page-c' ]
} TNTearch 플러그인을 사용하여 표준 페이지가 아닌 드롭 다운으로 검색을 렌더링 할 수 있습니다. 이렇게하려면 검색 부분을 embed 필요에 맞게 재정의해야합니다. Ajax 드롭 다운 검색 상자가있는 곳마다 테마에 이것을 추가 할 수 있습니다.
{% embed ' partials/tntsearch.html.twig ' with { limit : 10 , snippet : 150 , min : 3 , search_type : ' auto ' , dropdown : true } %}{% endembed %} 여기서 우리는 기본 부분을 포함 시키지만 옵션을 with 문에 전달하여 options 무시합니다. dropdown: true 설정해야한다는 점을 알아야합니다.
이 플러그인은 PHP 용 놀라운 TNTearch 라이브러리가 없으면 불가능했습니다. Github에서 그 프로젝트를 별표 로 시작하십시오.