弹性搜索匹配英语分析器的精确字符串

时间:2016-02-12 17:04:53

标签: elasticsearch

我认为是许多使用弹性搜索的用例。这是我的模板

PUT _template/test 
{
    "template" : "test*",
    "settings" : {
        "number_of_shards" : 5,
        "number_of_replicas" : 1
    },
    "mappings" : {
      "test": {
        "properties": {
          "name": {
            "type": "string",
            "index": "analyzed"
          },
        "description": {
            "type": "string",
            "index": "analyzed",
            "analyzer":"english",
            "fields": {
              "raw": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          }
        }
      }
   }
}

现在我要在索引中放一条记录

POST /test/test
{
    "name":"test-1",
    "description":"on the first day of christmas my true love gave to me a partridge in a pear tree"
}

现在想象我有一百万条记录。我想要做的是,如果我在描述字段中搜索on the,我不想回来,因为这些是英语分析器应该处理的常用词。但是,如果我搜索确切的文本"on the",那么我希望文档返回与确切文本匹配的文档。

我对弹性社区的问题是我如何允许这个以及查询应该是什么样的?我添加了.raw字段用于描述,但无论我的查询字符串是什么,我都无法获得确切的文本以返回任何结果。

1 个答案:

答案 0 :(得分:0)

英语分析仪已满足您的第一个要求。现在来到第二个问题,如果"在"通过你想要获得完整匹配的文件。如果出现第二个问题,应在"描述中进行搜索。生"领域。标记你的领域" raw":{                 "输入":" string",                 "索引":"分析"               这里默认的分析器是标准的,所以你将获得整个文档,其中“on”或“the”或“on”匹配,但如果你想匹配包含"的确切文档,请在“word配置新的自定义分析器” for" description.raw"使用“edge ngram”标记生成器的字段。 更多细节可以在下面的链接中找到 https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html