如何在 AWS CloudSearch 中使用结构化前缀运算符进行通配符搜索
How to do wildcard search using structured prefix operator with AWS CloudSearch
我目前正在迁移到 2013 Cloudsearch API(从 2011 API)。以前,我一直在搜索中使用通配符前缀,如下所示:
bq=(and 'first secon*')
我的查询有时包含方面选项,这就是我使用布尔查询语法而不是简单版本的原因。
我使用 2013 引擎创建了一个新的 cloudsearch 实例并将其编入索引。 bq
参数现在消失了,所以我必须将 q
参数与 q.parser=structured
参数一起使用才能获得相同的功能。当我用这样的查询时:
q.parser=simple&q=first secon*
...我得到了很多结果。但是当我用这个查询时:
q.parser=structured&q=(prefix 'first secon')
...我没有命中。我没有收到错误,只是没有找到结果。难道我做错了什么?
我刚刚意识到,如果我使用 2013 API 对单词 firs
进行前缀搜索,前缀搜索似乎有效。但是如果我在查询中有一个以上的术语,例如first secon
则前缀搜索不起作用。那么这是如何使用结构化前缀运算符来完成的呢?
您需要为每个单独的查询词指定前缀运算符,例如:
q=(or (prefix 'firs') (prefix 'secon'))&q.parser=structured
如果有人在寻找 JS 代码来解决这个问题。您需要做的是拆分 space 上的用户输入,并将它们存储在一个数组中。将要查询的单词与管道连接起来。
var params = {
query: ''
};
//Check for spaces
let words = query.split(' ');
let chunks = [];
words.forEach(word => {
chunks.push(`${word}* | ${word}`);
})
params.query = chunks.join(' | ');
cloudsearch.search(params, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
我目前正在迁移到 2013 Cloudsearch API(从 2011 API)。以前,我一直在搜索中使用通配符前缀,如下所示:
bq=(and 'first secon*')
我的查询有时包含方面选项,这就是我使用布尔查询语法而不是简单版本的原因。
我使用 2013 引擎创建了一个新的 cloudsearch 实例并将其编入索引。 bq
参数现在消失了,所以我必须将 q
参数与 q.parser=structured
参数一起使用才能获得相同的功能。当我用这样的查询时:
q.parser=simple&q=first secon*
...我得到了很多结果。但是当我用这个查询时:
q.parser=structured&q=(prefix 'first secon')
...我没有命中。我没有收到错误,只是没有找到结果。难道我做错了什么?
我刚刚意识到,如果我使用 2013 API 对单词 firs
进行前缀搜索,前缀搜索似乎有效。但是如果我在查询中有一个以上的术语,例如first secon
则前缀搜索不起作用。那么这是如何使用结构化前缀运算符来完成的呢?
您需要为每个单独的查询词指定前缀运算符,例如:
q=(or (prefix 'firs') (prefix 'secon'))&q.parser=structured
如果有人在寻找 JS 代码来解决这个问题。您需要做的是拆分 space 上的用户输入,并将它们存储在一个数组中。将要查询的单词与管道连接起来。
var params = {
query: ''
};
//Check for spaces
let words = query.split(' ');
let chunks = [];
words.forEach(word => {
chunks.push(`${word}* | ${word}`);
})
params.query = chunks.join(' | ');
cloudsearch.search(params, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});