簡體   English   中英

如何查詢elasticsearch中的字段?

[英]How to query fields in elasticsearch?

我嘗試使用字段映射進行一些查詢,但它不起作用。

定義索引映射

english_mapping = {
 "mappings": {
    "properties": {
      "text": { 
        "type": "text",
        "fields": {
          "english": { 
            "type":     "text",
            "analyzer": "english"
          }
        }
      }
    }
  }
}

es.indices.create(index = 'english', body = english_mapping)

添加一些數據

doc2 = { "text": "quick brown fox" }
doc3 = { "text": "quick brown foxes" }
es.index(index='english', document = doc2, id = 1)
es.index(index='english', document = doc3, id = 2)

查詢 text.english 字段但它不起作用(它返回兩個文檔)

res = es.search(index = 'english',  body = {"query": {
    "match": {
        "text.english" : "foxes"
    }
}})

請幫助我如何查詢 text.english 字段。

您正在使用的english分析器由一個english_stemmer標記過濾器組成,它所做的是詞干提取,例如foxes gets' stemmed to fox

因此,您下面的兩個文檔都以相同的方式進行分析/提取

doc2 = { "text": "quick brown fox" }
doc3 = { "text": "quick brown foxes" }

即以下標記被索引: quickbrownfox

在搜索foxes時的搜索時間也是如此,它被分析為fox ,這就是它找到兩個文檔的原因。

如果您在text字段而不是text.english上搜索,則會使用standard分析器,並且不會發生詞干提取,因此它將按您預期的方式工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM