ElasticSearch - 仅搜索完整短语

时间:2015-09-24 08:59:05

标签: elasticsearch

我正在尝试创建一个能够完全按照我的要求返回的搜索。

例如,让我说我有2个文件,其中有一个名为' Val'

的字段

第一个文档的值为' a - 复制',第二个文档是' a - 复制(2)'

我的目标是准确搜索价值' a - 复制'并且在我返回的结果中只找到第一个文档,而不是两个具有不同相似度排名的文档

当我尝试大多数常见查询时:

GET test/_search
{
  "query": {
    "match": { 
      "Val": {
          "query": "a - copy",
          "type":  "phrase"
      }
    }
  }
}

或:

GET /test/doc/_search
{
  "query": {
    "query_string": {
      "default_field": "Val",
      "query": "a - copy"
    }
  }
}

我一直都会得到这两份文件

2 个答案:

答案 0 :(得分:0)

是的,你得到的是因为你的字段很可能是analyzed并分成了令牌。

您需要一台与此类似的分析仪

    "custom_keyword_analyzer": {
      "type": "custom",
      "tokenizer": "keyword",
      "filter": "lowercase"
    }

使用keyword标记器和lowercase过滤器(我注意到你索引了大写字母,但希望用小写字母搜索)。

然后使用term过滤器搜索您的文档。

答案 1 :(得分:0)

有一个很好的文档可以在ES中找到确切的值: https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html

它向您展示了如何使用 JPanel F_panel = new JPanel(); String Fs_desc = MpaResourceBundle.getString(Ps_label, Constants.RB_PACKAGE); String Fs_dir = P_type.getRepoDir(); String Fs_title = Fs_desc + " (" + Fs_dir + ")"; F_panel.setBorder(BorderFactory.createTitledBorder(Fs_title)); F_panel.setLayout(new GridBagLayout()); GridBagConstraints F_constr = new GridBagConstraints(); F_constr.anchor = GridBagConstraints.NORTHWEST; F_constr.insets = new Insets(0, 0, 0, 0); F_constr.gridx = 0; F_constr.gridy = 0; for (PluginID F_pid : dataHolder.getAllPluginIDs()) { COSDependencyMetaInfoTree F_cosDepMITree = new COSDependencyMetaInfoTree(P_type, null, dataHolder.getMasterCOSLogObjectNames(), F_pid, dataHolder.getRepoObjectOwners(), null, P_coll); if (F_cosDepMITree.getRowCount() > 1) { P_treeList.add(F_cosDepMITree); F_panel.add(F_cosDepMITree, F_constr); F_constr.gridy++; } } if (F_panel.getComponents().length > 0) { add(F_panel, P_gbc); P_gbc.gridy++; } 过滤器,它也提到了term的问题。

简而言之,您需要像这样运行analyzed fields过滤器(我已将您的值放入其中):

term

但是,这不适用于分析的字段。你不会得到任何结果。

  

为了防止这种情况发生,我们需要告诉Elasticsearch   通过将其设置为not_analyzed,此字段包含精确值。

有多种方法可以实现这一目标。例如custom field mappings