我正在构建一个产品搜索平台.之前我使用过Solr搜索引擎,我发现它的性能很好,但是没有生成用户界面.最近我发现Algolia具有更多功能,易于设置,并生成用户界面.所以如果有人之前使用过Algolia:
我正在寻找一种在Algolia中搜索记录的方法,其中至少有一个数组元素符合几个条件.举个例子,想象一下这种记录:
{
"name": "Shoes",
"price": 100,
"prices": [
{
"start": 20160101,
"end": 20160131,
"price": 50,
},
{
"start": 20160201,
"end": 20160229,
"price": 80,
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来执行如下查询:
prices.price<60 AND prices.start<=20160210 AND prices.end>=20160210
(给定日期价格低于60的产品)
该查询不应返回任何内容,因为该日期未满足价格条件,但无论如何都会返回记录.可能是因为所有价格中的"全球"条件都符合条件.
我是Algolia的初学者并且正在努力学习.有没有办法可以做到所需的请求,还是我必须为价格单独索引并使用多个查询?
谢谢.
关于algolia的数据是这样的
objectID:3464542
Type:"Accelerator"
Country:"Germany"
City:null
Name:"ProsiebenSat1 Accelerator Batch #8"
Run Code Online (Sandbox Code Playgroud)
我想搜索德国的任何名字.我怎么做的?
当我这样做时Contact.raw_search("Batch"),我会得到所有记录,甚至其名称包括甚至非德语.我想得到所有特定国家的人.
我正在将Algolia与Firebase项目连接起来.我正在使用Firebase云功能,以使我的Algolia索引与我的Firebase数据库中发生的所有更改保持同步.但每当我打电话
index.saveObject(firebaseObject);
从我的Firebase云功能中,我得到了
AlgoliaSearchNetworkError:getaddrinfo ENOTFOUND 5sffby8as8-1.algolianet.com 5sffby8as8-1.algolianet.com:443
我可以在Firebase函数之外运行同步操作(仅在我自己的机器上).此代码通过node.js在javascript文件中运行.
我在任何搜索中都没有找到任何关于此的问题或答案.任何想法或帮助?
我正在尝试遵循一个关于设置算法的简单教程,可以在这里找到。
https://www.algolia.com/doc/tutorials/indexing/3rd-party-service/firebase-algolia/
我逐字逐句地将代码复制到index.js 文件中。
当我在终端中运行 node index.js 时,我得到了这个
没有成功消息。阿尔戈利亚什么也没有。没有什么。我已经包含了我的代码,是否有任何人注意到我可能做错了。这让我沮丧了好几个小时。
const algoliasearch = require('algoliasearch');
const dotenv = require('dotenv');
const firebase = require('firebase');
// load values from the .env file in this directory into process.env
dotenv.load();
// configure firebase
firebase.initializeApp({
databaseURL: process.env.FIREBASE_DATABASE_URL,
});
const database = firebase.database();
// configure algolia
const algolia = algoliasearch(
process.env.ALGOLIA_APP_ID,
process.env.ALGOLIA_API_KEY
);
const index = algolia.initIndex(process.env.ALGOLIA_INDEX_NAME);
// Get all contacts from Firebase
database.ref('/events').once('value', event => {
console.log('index is', index);
// Build an array of all records to …Run Code Online (Sandbox Code Playgroud) 我想使用 Algolia 但不知何故我没有找到任何关于将数据从 Postgresql 同步到 Algolia 的文档?
设想
在 node.js + mongodb 中有一个名为 mongolia 的库。
问候,
我最近为客户端集成了 Algolia 搜索,我注意到它目前不适用于任何基于 IE 的浏览器。
下面是我们正在使用的代码和我们包含的库文件的示例。我尝试了多种方法,包括 polyfill。但似乎还没有成功。
const search = instantsearch({
indexName: 'index',
searchClient: algoliasearch('KEY', 'PAIR')
})
search.addWidgets([
instantsearch.widgets.configure({
disjunctiveFacetsRefinements: {
lang: ['en-gb']
}
}),
instantsearch.widgets.pagination({
container: '#pagination'
}),
instantsearch.widgets.searchBox({
container: '#searchbox',
placeholder: 'Start typing to search..',
cssClasses: {
root: 'search-form'
},
}),
instantsearch.widgets.hits({
container: '#hits',
templates: {
item:
'<a href="{{ url }}"><h2>{{#helpers.highlight}}{ "attribute": "title" }{{/helpers.highlight}}</h2></a><p>{{ description }}</p>',
},
})
]);
search.start();
Run Code Online (Sandbox Code Playgroud)
我们将包括这两个文件以供搜索
<script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.0.0/dist/algoliasearch-lite.umd.js"
type="text/javascript"></script>
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.0.0/dist/instantsearch.production.min.js"
type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
我们得到的控制台错误也是
Uncaught, unspecified "error" event. ([object, object])
File: instantsearch.production.min.js, Line: 2, …Run Code Online (Sandbox Code Playgroud) 我使用 Algolia 进行搜索,我们得到了大量记录。我们想要删除一些记录,并决定删除早于 X 日期的记录。
首先我用的是这个
const records = [];
const deleteRecordsBeforeDateAlgolia = (date) => {
let client;
*****
const index = client.initIndex('function_message');
//get the records before the given date
try {
index.search('',{
filters: `time_stamp < ${date}`
}).then(({hits}) => {
if(hits.length > 0) {
for (const hit of hits) {
index.deleteObject(hit.objectID);
records.push(hit.objectID);
}
}
if(hits.length === 0) {
console.log(`Deleted ${records.length} records`);
} else {
deleteRecordsBeforeDateAlgolia(date);
}
});
} catch (err) {
console.error(err);
}
};
Run Code Online (Sandbox Code Playgroud)
但我意识到这并不是优化+在产品上删除时会非常慢。你能告诉我如何使用过滤器(在本例中为时间戳)获取大量数据,然后将其全部删除吗?
const records = []; …Run Code Online (Sandbox Code Playgroud) 我正在尝试让 Algolia InstantSearch.js 与我的 Svelte 网站一起使用。当我尝试在 Netlify 上部署它时,出现以下错误:
9:27:35 PM: [vite]: Rollup failed to resolve import "instantsearch.js/es/widgets.js" from "src/components/Search/SearchSection.svelte".
9:27:35 PM: This is most likely unintended because it can break your application at runtime.
9:27:35 PM: If you do want to externalize this module explicitly add it to
9:27:35 PM: `build.rollupOptions.external`
9:27:35 PM: > [vite]: Rollup failed to resolve import "instantsearch.js/es/widgets.js" from "src/components/Search/SearchSection.svelte".
9:27:35 PM: This is most likely unintended because it can break your application at runtime.
9:27:35 PM: …Run Code Online (Sandbox Code Playgroud) 我有一个数据数组,其中 Algolia 索引中包含多个对象,如下所示。
[
{
status:available
startDate: 2000-10-20
endDate:2022-10-20
availablePlatform:[1,2,3]
availableCountry:908,
},
{
status:available,
startDate: 2023-10-20
endDate:2123-10-20
availablePlatform:[4,5,6,7]
AvailableCountry:[144],
},
]
Run Code Online (Sandbox Code Playgroud)
我需要执行一个过滤,该过滤应该在这些对象中进行精确匹配。
前任:
(1)
avails.status:available AND avails.availablePlatform:2 AND avails.availableCountry:908
这将按预期返回 true。
(2)
avails.status:available AND avails.availablePlatform:2 AND avails.availableCountry:144
availableCountry当 Algolia与第二个对象匹配时,该值也会返回 true 。但在这种情况下我需要返回 false。这样的能力是否存在?或者人们可以向我指出解决这个问题的其他方法吗?
谢谢。
algolia ×10
javascript ×3
node.js ×3
events ×1
firebase ×1
performance ×1
postgresql ×1
rollupjs ×1
ruby ×1
search ×1
solr ×1
svelte ×1
websolr ×1