[英]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" }
即以下標記被索引: quick
、 brown
和fox
。
在搜索foxes
時的搜索時間也是如此,它被分析為fox
,這就是它找到兩個文檔的原因。
如果您在text
字段而不是text.english
上搜索,則會使用standard
分析器,並且不會發生詞干提取,因此它將按您預期的方式工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.