Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 弹性搜索关键字不匹配_Javascript_Node.js_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Javascript,Node.js,elasticsearch" /> elasticsearch,Javascript,Node.js,elasticsearch" />

Javascript 弹性搜索关键字不匹配

Javascript 弹性搜索关键字不匹配,javascript,node.js,elasticsearch,Javascript,Node.js,elasticsearch,一、 我正在弹性搜索数据库中执行搜索操作。我需要的是,如果我为搜索提供关键字'react',它应该只提供与关键字'react'匹配的结果。如果关键字是'react router',结果应该只包含'react router'。 问题是,如果我给搜索关键字'react',与'react router'关键字匹配的结果也会被检索。 有什么比匹配短语更好的选择吗?我尝试了regexp和通配符,但没有用。 如何解决这个问题 `const searchTags = (tag) => { const

一、 我正在弹性搜索数据库中执行搜索操作。我需要的是,如果我为搜索提供关键字'react',它应该只提供与关键字'react'匹配的结果。如果关键字是'react router',结果应该只包含'react router'。 问题是,如果我给搜索关键字'react',与'react router'关键字匹配的结果也会被检索。 有什么比匹配短语更好的选择吗?我尝试了regexp和通配符,但没有用。 如何解决这个问题

`const searchTags = (tag) => {
  const answerPush = [];
  return new Promise((resolve, reject) => {
    client.search({
      index : constants.QUESTIONNAIRE_INDEX,
      type : constants.QUESTIONS_TYPE,
      scroll : constants.SCROLL,
      body : {
        query : {
          match_phrase : {
            tags : tag
          }
        }
      }
    },
    function getMoreUntilDone(err, res) {
      if (err) {
        reject(err);
        return;
      } else {
        res.hits.hits.forEach(function(hit) {
          answerPush.push(hit._source);
        });
        if (res.hits.total > answerPush.length) {
          client.scroll({
            scrollId: res._scroll_id,
            scroll: constants.SCROLL
          }, getMoreUntilDone);
        } else {
          const answerArray = [];
          answerPush.map(val => {
            answerArray.push(val);
          });
          const result = {
            questions: answerArray
          };
          resolve(result);
        }
      }});
  });
};

`使用术语查询而不是匹配短语查询

const searchTags = (tag) => {
  const answerPush = [];
  return new Promise((resolve, reject) => {
    client.search({
      index : constants.QUESTIONNAIRE_INDEX,
      type : constants.QUESTIONS_TYPE,
      scroll : constants.SCROLL,
      body : {
        query : {
          term : {
            tags : tag
          }
        }
      }
    },
    function getMoreUntilDone(err, res) {
      if (err) {
        reject(err);
        return;
      } else {
        res.hits.hits.forEach(function(hit) {
          answerPush.push(hit._source);
        });
        if (res.hits.total > answerPush.length) {
          client.scroll({
            scrollId: res._scroll_id,
            scroll: constants.SCROLL
          }, getMoreUntilDone);
        } else {
          const answerArray = [];
          answerPush.map(val => {
            answerArray.push(val);
          });
          const result = {
            questions: answerArray
          };
          resolve(result);
        }
      }});
  });
};

若要按精确匹配进行搜索,必须使用术语查询

在您的情况下,它可能工作得很好,请记住,Elasticsearch将分析/索引您的字符串,例如react-redux将被“拆分”为两个关键字,因为“-”

您需要在映射中配置策略:

仍不工作,显示关键字“react-redux”的空结果@rahulmr是否有标记完全等于“react-redux”的文档?@rahulmr能否添加标记映射?您需要使用自定义分析器对ES说“请不要在“-”上拆分我的字符串,以便能够搜索完整字符串