【问题标题】:ElasticSearch query troubleElasticSearch 查询麻烦
【发布时间】:2016-03-30 09:37:25
【问题描述】:

在弹性搜索中使用下一个默认设置创建索引后:

{    "autosuggest_destination": {
      "aliases": {},
      "mappings": {
         "destination": {
            "properties": {
               "city": {
                  "type": "string"
               },
               "country": {
                  "type": "string"
               },
               "id": {
                  "type": "string"
               },
               "state": {
                  "type": "string"
               }
            }
         }
      },
      "settings": {
         "index": {
            "creation_date": "1459329252404",
            "number_of_shards": "1",
            "number_of_replicas": "0",
            "version": {
               "created": "1070299"
            },
            "uuid": "_1D7ZW0dQwy9kiKn0kKrLw"
         }
      },
      "warmers": {}    } }

将数据插入索引并验证后。

我在尝试搜索自动完成单词时遇到了这个问题:

当我尝试搜索“新”时,它会找到匹配项(纽约)。但如果我 尝试在'new y'之后添加一个空格和第一个字母,它发现 没有。在它尝试在“新”之后添加一个空格和两个字母之后 哟'它有效。

主要问题是理解为什么单词后面的第一个字母 空格不匹配?

示例:

    GET autosuggest_destination/destination/_search {    "query": {
        "match": {
          "city": {
            "query": "new", 
            "type": "phrase_prefix"
          }

           } }

    Result : New York


    GET autosuggest_destination/destination/_search {    "query": {
        "match": {
          "city": {
            "query": "new y", 
            "type": "phrase_prefix"
          }

           } }

    No Result

    GET autosuggest_destination/destination/_search {    "query": {
        "match": {
          "city": {
            "query": "new yo", 
            "type": "phrase_prefix"
          }

           } }

Result : New York

有人知道应该是什么问题吗?

【问题讨论】:

    标签: c# elasticsearch indexing autocomplete prefix


    【解决方案1】:


    Elasticsearch 在索引文档时使用分析器(默认或自定义),当您搜索某些值时,它将文档拆分为术语,然后它将与您想要搜索的内容进行匹配。
    在您的示例中: New York 使用默认分析器进行分析,它将您的文档拆分为 2 个术语 New, York。
    当您搜索 New 时,它会为您找到第一个词 New,因此它会给您回复 New York。 如果您按 New Y 搜索,它会将搜索分成 2 个词:New、Y 或 New、Yo,它会尝试查找与这 2 个词匹配的文档。您遇到的问题可能来自 max_expansions 参数。
    看这里http://elasticsearch-users.115913.n3.nabble.com/How-exactly-works-quot-max-expansions-quot-in-match-phrase-prefix-query-td4030146.html 也关于分析仪。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html

    【讨论】:

    【解决方案2】:

    如果我想查询诸如“ork”之类的部分单词到(结果执行:纽约) 然后没有命中。 我正在寻找文档中的指南,我所能找到的只是将查询更改为通配符,这将允许我这样做。 但我希望使用phrase_prefix 也只能通过部分单词进行搜索。 那可能吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2014-05-10
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多