Typesense 검색 서버와 함께 멋진 Instantsearch.js 라이브러리를 사용하여 풍부한 검색 인터페이스를 구축하기 위한 어댑터입니다.
다음은 이 어댑터로 구축할 수 있는 UI의 예입니다. songs-search.typesense.org
참고: 검색 인터페이스가 사용자 정의 자동 완성 구성 요소를 기반으로 구축되었거나 @algolia/autocomplete-js를 기반으로 하는 경우 typeense-js 라이브러리가 이미 클라이언트 측 가져오기를 지원하므로 Typesense와 함께 사용하는 데 이 어댑터가 필요하지 않습니다. 모든 비동기 데이터 소스의 데이터. 여기에서 자세한 내용을 읽어보세요.
Algolia의 좋은 사람들은 대화형 검색 경험을 신속하게 구축하는 데 사용할 수 있는 기본 구성 요소 모음인 Instantsearch.js를 구축하고 오픈 소스화했습니다.
이 저장소의 어댑터를 사용하면 Typesense 검색 서버에 인덱싱된 데이터와 함께 Instantsearch(및 React, Vue 및 Angular 사촌)를 사용할 수 있습니다.
이전에 Instantsearch를 사용해 본 적이 없다면 여기에서 시작하기 가이드를 살펴보는 것이 좋습니다. 가이드를 살펴본 후 아래 지침에 따라 Typesense 어댑터를 Instantsearch에 연결하세요.
다음은 Typesense 및 InstantSearch.js를 사용하여 빠른 검색 인터페이스를 구축하는 방법에 대한 가이드입니다: https://typesense.org/docs/0.20.0/guide/search-ui-comComponents.html
어댑터 사용 방법을 보여주는 데모 시작 앱은 다음과 같습니다. https://github.com/typesense/typesense-instantsearch-demo
$ npm install --save typesense-instantsearch-adapter @babel/runtime
또는
$ yarn add typesense-instantsearch-adapter @babel/runtime
또는 HTML의 스크립트 태그를 통해 어댑터를 직접 포함할 수도 있습니다.
< script src =" https://cdn.jsdelivr.net/npm/typesense-instantsearch-adapter@2/dist/typesense-instantsearch-adapter.min.js " > </ script >
<!-- You might want to pin the version of the adapter used if you don't want to always receive the latest minor version -->
이는 어댑터이므로 Instantsearch 라이브러리를 자동으로 설치하지 않습니다 . 애플리케이션에 다음 중 하나를 직접 설치해야 합니다.
해당 저장소에서 위의 각 라이브러리를 시작하는 방법에 대한 정보를 찾을 수 있습니다.
또한 시작 템플릿에서 검색 UI를 생성하려면 create-instantsearch-app을 확인하는 것이 좋습니다.
import instantsearch from "instantsearch.js" ;
import { searchBox , hits } from "instantsearch.js/es/widgets" ;
import TypesenseInstantSearchAdapter from "typesense-instantsearch-adapter" ;
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "abcd" , // Be sure to use an API key that only allows search operations
nodes : [
{
host : "localhost" ,
path : "" , // Optional. Example: If you have your typesense mounted in localhost:8108/typesense, path should be equal to '/typesense'
port : "8108" ,
protocol : "http" ,
} ,
] ,
cacheSearchResultsForSeconds : 2 * 60 , // Cache search results from server. Defaults to 2 minutes. Set to 0 to disable caching.
} ,
// The following parameters are directly passed to Typesense's search API endpoint.
// So you can pass any parameters supported by the search endpoint below.
// query_by is required.
additionalSearchParameters : {
query_by : "name,description,categories" ,
} ,
} ) ;
const searchClient = typesenseInstantsearchAdapter . searchClient ;
const search = instantsearch ( {
searchClient ,
indexName : "products" ,
} ) ;
search . addWidgets ( [
searchBox ( {
container : "#searchbox" ,
} ) ,
hits ( {
container : "#hits" ,
templates : {
item : `
<div class="hit-name">
{{#helpers.highlight}}{ "attribute": "name" }{{/helpers.highlight}}
</div>
` ,
} ,
} ) ,
] ) ;
search . start ( ) ;
어댑터에서 지원하는 모든 Instantsearch 위젯을 여기에 추가할 수 있습니다.
test/support/testground에서도 실제 예제를 찾을 수 있습니다. 실행하려면 프로젝트 루트 폴더에서 npm run testground
실행하세요.
import React from "react" ;
import ReactDOM from "react-dom" ;
import { SearchBox } from "react-instantsearch-dom" ;
import TypesenseInstantSearchAdapter from "typesense-instantsearch-adapter" ;
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "abcd" , // Be sure to use an API key that only allows search operations
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "" , // Optional. Example: If you have your typesense mounted in localhost:8108/typesense, path should be equal to '/typesense'
protocol : "http" ,
} ,
] ,
cacheSearchResultsForSeconds : 2 * 60 , // Cache search results from server. Defaults to 2 minutes. Set to 0 to disable caching.
} ,
// The following parameters are directly passed to Typesense's search API endpoint.
// So you can pass any parameters supported by the search endpoint below.
// query_by is required.
additionalSearchParameters : {
query_by : "name,description,categories" ,
} ,
} ) ;
const searchClient = typesenseInstantsearchAdapter . searchClient ;
const App = ( ) => (
< InstantSearch indexName = "products" searchClient = { searchClient } >
< SearchBox / >
< Hits / >
< / InstantSearch >
) ;
그런 다음 어댑터에서 지원하는 Instantsearch-React 위젯을 여기에 추가할 수 있습니다.
위 지침은 React Native에도 적용됩니다.
App.vue:
< template >
< ais-instant-search :search-client = " searchClient " index-name = " products " >
< ais-search-box />
< ais-hits >
< div slot = " item " slot-scope = " { item } " >
< h2 >{{ item.name }}</ h2 >
</ div >
</ ais-hits >
</ ais-instant-search >
</ template >
< script >
import TypesenseInstantSearchAdapter from " typesense-instantsearch-adapter " ;
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ({
server : {
apiKey : " abcd " , // Be sure to use an API key that only allows search operations
nodes : [
{
host : " localhost " ,
path : " " , // Optional. Example: If you have your typesense mounted in localhost:8108/typesense, path should be equal to '/typesense'
port : " 8108 " ,
protocol : " http " ,
},
],
cacheSearchResultsForSeconds : 2 * 60 , // Cache search results from server. Defaults to 2 minutes. Set to 0 to disable caching.
},
// The following parameters are directly passed to Typesense's search API endpoint.
// So you can pass any parameters supported by the search endpoint below.
// query_by is required.
additionalSearchParameters : {
query_by : " name,description,categories " ,
},
});
const searchClient = typesenseInstantsearchAdapter . searchClient ;
export default {
data () {
return {
searchClient,
};
},
};
</ script >
그런 다음 어댑터에서 지원하는 Instantsearch 위젯을 여기에 추가할 수 있습니다.
// app.component.ts
import { Component } from "@angular/core" ;
import TypesenseInstantSearchAdapter from "typesense-instantsearch-adapter" ;
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "abcd" , // Be sure to use an API key that only allows search operations
nodes : [
{
host : "localhost" ,
path : "" , // Optional. Example: If you have your typesense mounted in localhost:8108/typesense, path should be equal to '/typesense'
port : "8108" ,
protocol : "http" ,
} ,
] ,
cacheSearchResultsForSeconds : 2 * 60 , // Cache search results from server. Defaults to 2 minutes. Set to 0 to disable caching.
} ,
// The following parameters are directly passed to Typesense's search API endpoint.
// So you can pass any parameters supported by the search endpoint below.
// query_by is required.
additionalSearchParameters : {
query_by : "name,description,categories" ,
} ,
} ) ;
const searchClient = typesenseInstantsearchAdapter . searchClient ;
@ Component ( {
selector : "app-root" ,
templateUrl : "./app.component.html" ,
styleUrls : [ "./app.component.css" ] ,
} )
export class AppComponent {
config = {
indexName : "products" ,
searchClient ,
} ;
}
그런 다음 어댑터에서 지원하는 Instantsearch 위젯을 여기에 추가할 수 있습니다.
hierarchicalMenu
이 위젯의 경우 다음과 같은 특정 명명 규칙을 사용하여 컬렉션의 스키마에 독립적인 필드를 생성하려고 합니다.
field.lvl0
field.lvl1
field.lvl2
field.lvl0 > field.lvl1 > field.lvl2
의 중첩 계층 구조
각 필드에는 값 배열이 포함될 수도 있습니다. 이는 여러 계층을 처리하는 데 유용합니다.
sortBy
이 위젯을 인스턴스화할 때 인덱스 이름 값을 다음 특정 형식으로 설정하려고 합니다.
search . addWidgets ( [
sortBy ( {
container : "#sort-by" ,
items : [
{ label : "Default" , value : "products" } ,
{ label : "Price (asc)" , value : "products/sort/price:asc" } ,
{ label : "Price (desc)" , value : "products/sort/price:desc" } ,
] ,
} ) ,
] ) ;
값 속성의 일반화된 패턴은 <index_name>[/sort/<sort_by>]
입니다. 어댑터는 <sort_by>
의 값을 sort_by
검색 매개변수의 값으로 사용합니다.
configure
Typesense에 대한 filter_by
검색 매개변수를 지정해야 하는 경우, facetFilters
, numericFilters
또는 filters
와 함께 InstantSearch configure
위젯을 사용하는 것이 좋습니다.
facetFilters
및 numericFilters
의 형식은 여기에 설명된 Algolia의 형식과 동일합니다. 그러나 filters
여기 이 표에 설명된 대로 Typesense의 filter_by
형식이어야 합니다.
additionalQueryParameters
구성 내에서 filter_by
설정은 위젯이 처음 로드될 때만 작동합니다. 왜냐하면 InstantSearch가 이후에 내부적으로 filter_by
필드를 재정의하기 때문입니다. 여기에서 자세한 내용을 읽어보세요.
index
통합/다중 색인 검색의 경우 index
위젯을 사용해야 합니다. 그런 다음 각 인덱스/컬렉션에 대해 서로 다른 검색 매개변수를 지정할 수 있으려면 collectionSpecificSearchParameters
구성을 사용하여 이를 지정할 수 있습니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "abcd" , // Be sure to use an API key that only allows search operations
nodes : [ { host : "localhost" , path : "/" , port : "8108" , protocol : "http" } ] ,
} ,
// Search parameters that are common to all collections/indices go here:
additionalSearchParameters : {
numTypos : 3 ,
} ,
// Search parameters that need to be *overridden* on a per-collection-basis go here:
collectionSpecificSearchParameters : {
products : {
query_by : "name,description,categories" ,
} ,
brands : {
query_by : "name" ,
} ,
} ,
} ) ;
const searchClient = typesenseInstantsearchAdapter . searchClient ;
기본적으로 Typesense를 쿼리할 때 collectionSpecificSearchParameters
에 설정된 모든 매개변수는 additionalSearchParameters
의 값과 병합되어 컬렉션별로 additionalSearchParameters
의 값을 효과적으로 재정의합니다.
geoSearch
Algolia는 레코드의 위도 경도 값을 저장하는 필드 이름으로 기본적으로 _geoloc
사용합니다. Typesense에서는 지리적 위치 필드의 이름을 무엇이든 지정할 수 있습니다. _geoloc
이외의 이름을 사용하는 경우 어댑터를 초기화할 때 아래와 같이 지정해야 InstantSearch가 액세스할 수 있습니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
geoLocationField : "lat_lng_field" , // <<======
additionalSearchParameters ,
} ) ;
dynamicWidgets
Typesense Server
v0.25.0.rc12
부터 사용 가능
이 dynamicWidgets
위젯은 추가 변경 없이 바로 작동하지만, UI에 이러한 패싯이 표시되는 순서를 제어하려는 경우 Instantsearch에서는 renderingContent
라는 매개변수가 설정될 것으로 예상합니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
renderingContent : {
// <<===== Add this, only if you want to control the order of the widgets displayed by dynamicWidgets
facetOrdering : {
facets : {
order : [ "size" , "brand" ] , // <<===== Change this as needed
} ,
} ,
} ,
additionalSearchParameters ,
} ) ;
여기에서 Algolia 문서에서 renderingContent
에 사용 가능한 모든 옵션에 대해 자세히 알아보세요.
typesense-instantsearch-adapter
2.7.0-2
부터 사용 가능
문서의 문자열 필드에 해당 값에 콜론 :
이 있는 경우(예를 들어 { brand: "a:b" }
라는 필드가 있다고 가정하면 어댑터를 인스턴스화할 때 아래와 같은 매개변수를 추가해야 합니다.)
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
facetableFieldsWithSpecialCharacters : [ "brand" ] , // <======= Add string fields that have colons in their values here, to aid in parsing
additionalSearchParameters ,
} ) ;
문서의 숫자 필드 이름 에 >
, <
, =
같은 특수 문자가 있는 경우(예를 들어 { price>discount: 3.0 }
라는 필드가 있다고 가정) 어댑터를 인스턴스화할 때 아래와 같은 매개변수를 추가해야 합니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
facetableFieldsWithSpecialCharacters : [ "price>discount" ] , // // <======= Add numeric fields that have >, < or = in their names, to aid in parsing
additionalSearchParameters ,
} ) ;
facet_by
옵션 설정typesense-instantsearch-adapter
2.8.0-1
및 Typesense Serverv0.26.0.rc25
부터 사용 가능
facet_by
매개변수는 다양한 필터 위젯을 사용할 때 InstantSearch에 의해 내부적으로 관리됩니다.
그러나 사용자 정의 옵션을 facet_by
매개변수(예: 서버 측 정렬 옵션)에 전달해야 하는 경우 아래와 같이 facetByOptions
매개변수를 사용할 수 있습니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
facetByOptions : {
brand : "(sort_by: _alpha:asc)" ,
category : "(sort_by: _alpha:desc)" ,
} , // <======= Add any facet_by parameter as a key value pair. Don't forget the surrounding parantheses in the value.
collectionSpecificFacetByOptions : {
collection1 : {
brand : "(sort_by: _alpha:desc)" ,
} ,
} , // <======= Use this parameter if multiple collections share the same field names, and you want to use different options for each field. This will override facetByOptions for that particular collection.
additionalSearchParameters ,
} ) ;
RefinementLists에서 정렬하려면 Typesense 서버 측에서 정렬하는 것 외에도 sortBy
매개변수를 RefinementList 위젯에 전달하여 클라이언트 측에서도 결과를 적절하게 정렬해야 합니다.
filter_by
옵션 설정typesense-instantsearch-adapter
2.8.0-5
부터 사용 가능
filter_by
매개변수는 다양한 필터 위젯을 사용할 때 InstantSearch에 의해 내부적으로 관리됩니다.
기본적으로 어댑터는 쿼리를 Typesense로 보낼 때 정확한 필터링( filter_by: field:=value
)을 사용합니다. :
정확하지 않은 단어 수준 필터링 - filter_by: field:value
)을 사용하도록 어댑터를 구성해야 하는 경우 filterByOptions
구성을 사용하여 어댑터를 인스턴스화하려고 합니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
filterByOptions : {
brand : { exactMatch : false } , // <========== Add this to do non-exact word-level filtering
category : { exactMatch : false } ,
} ,
collectionSpecificFilterByOptions : {
collection1 : {
brand : { exactMatch : false } ,
} ,
} , // <======= Use this parameter if multiple collections share the same field names, and you want to use different options for each field. This will override filterByOptions for that particular collection.
additionalSearchParameters ,
} ) ;
typesense-instantsearch-adapter
2.9.0-0
부터 사용 가능
사용자가 특정 정렬 순서를 선택할 때 재정의/큐레이션 규칙을 비활성화하는 방법은 다음과 같습니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
sortByOptions : {
"field1:desc,field2:desc" : { enable_overrides : false } , // <========== Add this to disable sorting when this particular Typesense `sort_by` string is generated by the sortBy widget
} ,
collectionSpecificSortByOptions : {
collection2 : {
"field1:desc,field2:desc" : { enable_overrides : false } ,
} ,
} , // <======= Use this parameter if multiple collections share the same field names, and you want to use different options for each field. This will override sortByOptions for that particular collection.
additionalSearchParameters ,
} ) ;
예를 들어 products/sort/price:asc
의 indexName 값으로 구성된 sortBy 위젯이 있는 경우 sortByOptions
내부의 키는 price:asc
여야 합니다.
typesense-instantsearch-adapter
2.7.1-4
부터 사용 가능
기본적으로 group_by
검색 매개변수로 사용되는 경우 어댑터는 모든 그룹의 결과를 단일 순차 적중 목록으로 평면화합니다.
그룹을 유지하려면 어댑터를 인스턴스화할 때 flattenGroupedHits: false
설정하려고 합니다.
이렇게 하면 그룹의 첫 번째 히트가 기본 히트로 배치된 다음 각 히트 내의 _grouped_hits
키 내에 그룹의 모든 히트가 추가됩니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
flattenGroupedHits : false , // <=======
additionalSearchParameters ,
} ) ;
typesense-instantsearch-adapter
2.7.0-3
부터 사용 가능
일반적인 아이디어는 먼저 Instantsearch의 쿼리 수명 주기에 연결하고, 입력된 쿼리를 가로채서 임베딩 API로 보내고, 임베딩을 가져온 다음 벡터를 Typesense로 보내 가장 가까운 이웃 벡터 검색을 수행하는 것입니다.
로컬에서 실행하여 이를 실제로 확인할 수 있는 데모는 다음과 같습니다: https://github.com/typesense/showcase-hn-comments-semantic-search.
Instantsearch.js에서 이를 수행하는 방법은 다음과 같습니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
additionalSearchParameters ,
} ) ;
// from https://github.com/typesense/showcase-hn-comments-semantic-search/blob/8a33006cae58b425c53f56a64e1273e808cd9375/src/js/index.js#L101
const searchClient = typesenseInstantsearchAdapter . searchClient ;
search = instantsearch ( {
searchClient ,
indexName : INDEX_NAME ,
routing : true ,
async searchFunction ( helper ) {
// This fetches 200 (nearest neighbor) results for semantic / hybrid search
let query = helper . getQuery ( ) . query ;
const page = helper . getPage ( ) ; // Retrieve the current page
if ( query !== "" && [ "semantic" , "hybrid" ] . includes ( $ ( "#search-type-select" ) . val ( ) ) ) {
console . log ( helper . getQuery ( ) . query ) ;
helper
. setQueryParameter (
"typesenseVectorQuery" , // <=== Special parameter that only works in [email protected] and above
`embedding:([], k:200)` ,
)
. setPage ( page )
. search ( ) ;
console . log ( helper . getQuery ( ) . query ) ;
} else {
helper . setQueryParameter ( "typesenseVectorQuery" , null ) . setPage ( page ) . search ( ) ;
}
} ,
} ) ;
캐싱에는 두 가지 모드가 있습니다.
서버측 캐싱:
서버 측 캐싱을 활성화하려면 다음과 같이 typeense-instantsearch-adapter의 server
구성 블록에 useServerSideSearchCache: true
라는 매개변수를 추가하세요.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "..." ,
nearestNode : { ... } ,
nodes : [ ... ] ,
useServerSideSearchCache : true // <<< Add this to send use_cache as a query parameter instead of post body parameter
} ,
additionalSearchParameters : { ... }
} ) ;
이로 인해 어댑터는 어댑터에 의해 시작된 모든 검색 요청에 URL 쿼리 매개변수로 ?use_cache=true
추가하게 되고 Typesense 서버는 이러한 요청에 대해 서버측 캐싱을 활성화하게 됩니다.
클라이언트측 캐싱:
또한 어댑터에는 서버에 대한 불필요한 네트워크 호출을 방지하기 위해 기본적으로 클라이언트 측 캐싱이 활성화되어 있습니다. 이 클라이언트 측 캐시의 TTL은 다음과 같이 구성할 수 있습니다.
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "..." ,
nearestNode : { ... } ,
nodes : [ ... ] ,
cacheSearchResultsForSeconds : 2 * 60 // <<< Add this to configure the TTL for client-side cache in the browser
} ,
additionalSearchParameters : { ... }
} ) ;
타입센스 서버 | 유형 감지-인스턴트 검색-어댑터 | instantsearch.js | 반응 즉시 검색 | vue-즉석 검색 | 각도 순간 검색 |
---|---|---|---|---|---|
>= v0.25.0 | >= v2.7.1 | >= 4.51 | >= 6.39 | >= 4.8 | >= 4.4 |
>= v0.25.0.rc14 | >= v2.7.0-1 | >= 4.51 | >= 6.39 | >= 4.8 | >= 4.4 |
>= v0.25.0.rc12 | >= v2.6.0 | >= 4.51 | >= 6.39 | >= 4.8 | >= 4.4 |
>= v0.24 | >= v2.5.0 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
>= v0.21 | >= v2.0.0 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
>= v0.19 | >= v1.0.0 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
>= v0.15 | >= v0.3.0 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
>= v0.14 | >= v0.2.0 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
>= v0.13 | >= v0.1.0 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
>= v0.12 | >= v0.0.4 | >= 4.2.0 | >= 6.0.0 | >= 2.2.1 | >= 3.0.0 |
위 라이브러리의 특정 버전이 어댑터와 작동하지 않는 경우 자세한 내용이 포함된 Github 문제를 열어주세요.
이 어댑터는 이 목록의 모든 위젯에서 작동합니다.
$ npm install
$ npm run typesenseServer
$ FORCE_REINDEX=true npm run indexTestData
$ npm link typesense-instantsearch-adapter
$ npm run testground
$ npm test
새 버전을 출시하려면 np 패키지를 사용합니다.
$ npm install --global np
$ np
# Follow instructions that np shows you
질문이 있거나 문제가 발생한 경우 Github 문제를 생성해 주시면 최선을 다해 도와드리겠습니다.
© 2020-현재 Typesense, Inc.