search - 从Elasticsearch中的精确单词匹配开始?

标签 search elasticsearch lucene prefix

我有一个包含字段标题的索引,其数据如下。

  • 果酱面包
  • jamun
  • 牙买加国家

  • 因此,如果用户搜索 jam ,我不希望 jamun jamaica country 也出现在搜索结果中。现在,我在Elasticsearch中使用前缀查询,但是没有给我想要的结果。
    { 
      "query": {
        "prefix" : { "title" : "jam" }
      }
    }
    

    最佳答案

    您将获得两个结果,因为前缀查询实际上对倒排索引运行一个regexp查询(keyword*),因此两个结果都将匹配。

    您可以执行以下操作,并使用term query而不是前缀查询来对tokenized关键字进行完全匹配。

    PUT exact_index1
    {
      "mappings": {
        "document_type" : {
          "properties": {
            "title" : {
              "type": "text"
            }
          }
        }
      }
    }
    
    POST exact_index1/document_type
    {
      "title" : "jamun"
    }
    
    POST exact_index1/_search
    {
      "query": {
        "term": {
          "title": {
            "value": "jam"
          }
        }
      }
    }
    

    希望这可以帮助

    关于search - 从Elasticsearch中的精确单词匹配开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45137621/

    相关文章:

    php - 页面刷新后 Laravel 搜索功能崩溃

    elasticsearch - Logstash 配置文件错误(Answer not working)

    elasticsearch - 图、分面、全文 : best of all worlds?

    c# - 获取所有具有特定 fieldName 的 lucene 值

    算法 - 树中所有节点的最大距离

    c++ - 区域搜索中的点

    css - 固定页脚模糊 firefox 搜索匹配

    elasticsearch - 根据顶级过滤器聚合创建不同的子聚合

    elasticsearch - ElasticSearch 作为主数据存储相对于写入丢失、数据可用性等因素的可靠性如何

    solr - Nutch:数据读取和添加元数据