代码之家  ›  专栏  ›  技术社区  ›  RTF

如何在AWS CloudSearch中使用结构化前缀运算符进行通配符搜索

  •  2
  • RTF  · 技术社区  · 9 年前

    我目前已迁移到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')
    

    ……我没有被击中。我没有得到错误,只是没有找到结果。我做错什么了吗?

    我刚刚意识到,如果我对单词进行前缀搜索 firs 使用2013 API,前缀搜索似乎可以正常工作。但如果我在查询中有一个以上的词,例如。 first secon 则前缀搜索不起作用。那么,如何使用结构化前缀运算符实现这一点呢?

    2 回复  |  直到 9 年前
        1
  •  8
  •   alexroussos    9 年前

    您需要为每个单独的查询项指定前缀运算符,例如:

    q=(or (prefix 'firs') (prefix 'secon'))&q.parser=structured

        2
  •  0
  •   blackops    4 年前

    如果有人在寻找JS代码来解决这个问题。您需要做的是在空间上拆分用户输入,并将它们存储在一个数组中。将要查询的单词与管道连接在一起。

          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);
            }
          });