【问题标题】:Best search method for keyword search关键字搜索的最佳搜索方法
【发布时间】:2017-12-22 04:07:24
【问题描述】:

在我的文档中,我将以下文本索引为关键字

80TL00ABM/256GB SSD

现在,搜索这个的最佳方法是什么?

我尝试过使用Match queryMatch phrase prefix,但两者都需要我搜索整个单词,而不仅仅是80TL00ABM

另外,如果我不将它作为关键字进行索引,那么我无法用整个字符串搜索它,因为/

Indexed with: type: keyword normalizer: char_filter: [], filter: [lowercase]

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:
    POST _search
    {
      "query": {
        "term" : { "FIELD" : "80tl00abm/256gb ssd" } 
      }
    }
    

    匹配查询适用于文本字段。对于关键字字段,最好使用术语查询。请注意,搜索的字符串是小写的,因为您使用了将关键字小写的规范器

    【讨论】:

    • 请注意,该字段有一个带有lowercase 标记过滤器的规范化器,因此字符串也应该全部小写,即没有关键字字段的搜索时间分析器等等效项。跨度>
    • @Val 你是对的。我还没有看到问题中的规范化器
    【解决方案2】:

    您可能想使用multi-fields。这允许您使用不同的索引时间分析器对同一字段进行两次索引,从而在进行搜索时为您提供灵活性。例如:

    {
      "mappings": {
        "mytype": {
          "properties": {
            "myfield": {
              "type": "keyword",
              "fields": {
                "analyzed": {
                    "type": "text"
                }
              }
            }
          }
        }
      }
    }
    

    这会将“myfield”索引两次,一次是使用术语查询作为精确匹配的关键字,一次是使用匹配查询作为文本。

    这个词条查询将对关键字字段进行操作:

    {
        "query": {
            "term": {
                "myfield": "80TL00ABM/256GB SSD"
            }
        }
    }
    

    此匹配查询将对分析的字段进行操作。请注意用于执行搜索的字段名称的不同:

    {
        "query": {
            "match": {
                "myfield.analyzed": "80TL00ABM"
            }
        }
    }
    

    如其他答案中所述,请注意您使用的小写过滤器,以便在使用术语查询时提供正确的大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2014-11-08
      • 1970-01-01
      • 2018-10-07
      相关资源
      最近更新 更多