محول لاستخدام مكتبة Instantsearch.js الرائعة مع خادم بحث Typesense، لإنشاء واجهات بحث غنية.
فيما يلي مثال لواجهة المستخدم التي يمكنك إنشاؤها باستخدام هذا المحول: songs-search.typesense.org
ملاحظة: إذا كانت واجهة البحث الخاصة بك مبنية على مكون الإكمال التلقائي المخصص، أو تعتمد على @algolia/autocomplete-js، فلن تحتاج إلى هذا المحول لاستخدامه مع Typesense، حيث أن مكتبة typesense-js تدعم بالفعل الجلب من جانب العميل البيانات من أي مصادر بيانات غير متزامنة. اقرأ المزيد هنا.
قام الأشخاص الجيدون في Algolia ببناء Instantsearch.js مفتوح المصدر وهو عبارة عن مجموعة من المكونات الجاهزة التي يمكنك استخدامها لبناء تجارب بحث تفاعلية بسرعة.
باستخدام المهايئ الموجود في هذا المستودع، ستتمكن من استخدام البحث الفوري (ومثيلاته React وVue وAngular) مع البيانات المفهرسة في خادم بحث Typesense.
إذا لم تكن قد استخدمت Instantsearch من قبل، فنوصيك بالاطلاع على دليل البدء الخاص بهم هنا. بمجرد الاطلاع على الدليل، اتبع الإرشادات أدناه لتوصيل محول Typesense بالبحث الفوري.
فيما يلي دليل حول إنشاء واجهة بحث سريعة باستخدام Typesense وInstantSearch.js: https://typesense.org/docs/0.20.0/guide/search-ui-components.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 تلقائيًا نيابةً عنك. تحتاج إلى تثبيت أحد البرامج التالية في تطبيقك مباشرةً:
ستجد معلومات حول كيفية البدء مع كل من المكتبات المذكورة أعلاه في مستودعاتها الخاصة.
نوصي أيضًا بمراجعة تطبيق 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 ( ) ;
يمكنك إضافة أي من أدوات البحث الفوري التي يدعمها المحول هنا.
ستجد أيضًا مثالًا عمليًا في 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.
عرض التطبيق:
< 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 >
يمكنك بعد ذلك إضافة أي من أدوات البحث الفوري التي يدعمها المحول هنا.
// 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 ,
} ;
}
يمكنك بعد ذلك إضافة أي من أدوات البحث الفوري التي يدعمها المحول هنا.
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
إذا كنت بحاجة إلى تحديد معلمة بحث filter_by
لـ Typesense، فأنت تريد استخدام عنصر واجهة مستخدم configure
InstantSearch، إلى جانب facetFilters
أو numericFilters
أو filters
.
تنسيق facetFilters
و numericFilters
هو نفس تنسيق Algolia كما هو موضح هنا. لكن filters
يجب أن تكون بتنسيق filter_by
الخاص بـ Typesense كما هو موضح في هذا الجدول هنا.
لا يعمل إعداد filter_by
داخل تكوين additionalQueryParameters
إلا عند تحميل عناصر واجهة المستخدم في البداية، لأن 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 ;
بشكل أساسي، سيتم دمج أي معلمات تم تعيينها في collectionSpecificSearchParameters
مع القيم الموجودة في additionalSearchParameters
عند الاستعلام عن Typesense، مما يؤدي بشكل فعال إلى تجاوز القيم في additionalSearchParameters
على أساس كل مجموعة.
geoSearch
تستخدم Algolia _geoloc
بشكل افتراضي لاسم الحقل الذي يخزن القيم الطويلة لسجل ما. في Typesense، يمكنك تسمية حقل الموقع الجغرافي بأي شيء. إذا كنت تستخدم اسمًا آخر غير _geoloc
، فستحتاج إلى تحديده عند تهيئة المحول كما هو موضح أدناه، حتى يتمكن البحث الفوري من الوصول إليه:
const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter ( {
server : {
apiKey : "xyz" ,
nodes : [
{
host : "localhost" ,
port : "8108" ,
path : "/" ,
protocol : "http" ,
} ,
] ,
} ,
geoLocationField : "lat_lng_field" , // <<======
additionalSearchParameters ,
} ) ;
dynamicWidgets
متوفر اعتبارًا من
v0.25.0.rc12
من Typesense Server
تعمل أداة dynamicWidgets
هذه خارج الصندوق دون أي تغييرات إضافية، ولكن إذا كنت تريد التحكم في الترتيب الذي يتم به عرض هذه الجوانب في واجهة المستخدم، فإن البحث الفوري يتوقع تعيين معلمة تسمى 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 ,
} ) ;
اقرأ المزيد حول جميع الخيارات المتاحة لعرض renderingContent
في وثائق Algolia هنا.
متوفر اعتبارًا من محول البحث الفوري
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
متوفر اعتبارًا من typeense-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 ,
} ) ;
لاحظ أنه بالنسبة للفرز في قوائم التصفية، بالإضافة إلى الفرز على جانب خادم Typesense، ستحتاج أيضًا إلى تمرير معلمة sortBy
إلى عنصر واجهة مستخدم RefinementList لفرز النتائج بشكل مناسب من جانب العميل أيضًا.
filter_by
متوفر اعتبارًا من محول البحث الفوري typeense
2.8.0-5
تتم إدارة المعلمة filter_by
بواسطة InstantSearch داخليًا عند استخدام عناصر واجهة مستخدم التصفية المتنوعة.
افتراضيًا، يستخدم المحول التصفية الدقيقة ( filter_by: field:=value
) عند إرسال الاستعلامات إلى Typesense. إذا كنت بحاجة إلى تكوين المحول لاستخدام :
(تصفية غير دقيقة على مستوى الكلمة - 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 ,
} ) ;
متوفر اعتبارًا من محول البحث الفوري typeense
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 ,
} ) ;
إذا كان لديك عناصر واجهة مستخدم SortBy تم تكوينها بقيمة IndexName products/sort/price:asc
على سبيل المثال، فيجب أن يكون المفتاح الموجود داخل sortByOptions
هو price:asc
.
متوفر اعتبارًا من محول البحث الفوري typeense
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 ,
} ) ;
متوفر اعتبارًا من محول البحث الفوري
2.7.0-3
الفكرة العامة هي الارتباط أولاً بدورة حياة استعلام البحث الفوري، واعتراض الاستعلام المكتوب وإرساله إلى واجهة برمجة تطبيقات التضمين، وجلب التضمينات، ثم إرسال المتجهات إلى 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 ( ) ;
}
} ,
} ) ;
هناك وضعان للتخزين المؤقت:
التخزين المؤقت من جانب الخادم:
لتمكين التخزين المؤقت من جانب الخادم، قم بإضافة معلمة تسمى useServerSideSearchCache: true
في كتلة تكوين server
الخاصة بمحول typeense-instantsearch-adapter مثل هذا:
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 : { ... }
} ) ;
سيؤدي هذا إلى قيام المحول بإضافة ?use_cache=true
كمعلمة استعلام URL لجميع طلبات البحث التي بدأها المحول، مما سيؤدي بعد ذلك إلى تمكين خادم 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 : { ... }
} ) ;
خادم تايب سينس | محول البحث الفوري typeense | Instantsearch.js | رد فعل البحث الفوري | vue-instantsearch | البحث الزاوي الفوري |
---|---|---|---|---|---|
>= 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.