关键字搜索的最佳搜索方法

时间:2017-12-21 13:39:24

标签: elasticsearch

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

80TL00ABM/256GB SSD

现在,搜索此内容的最佳方式是什么?

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

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

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

2 个答案:

答案 0 :(得分:0)

POST _search
{
  "query": {
    "term" : { "FIELD" : "80tl00abm/256gb ssd" } 
  }
}

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

的规范化器

答案 1 :(得分:0)

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

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

将“myfield”索引两次,一次作为使用术语查询的完全匹配的关键字,一次作为文本,使用匹配查询。

此术语查询将对关键字字段进行操作:

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

此匹配查询将在分析的字段上运行。请注意用于执行搜索的字段名称的差异:

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

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