2 回答

TA貢獻1873條經驗 獲得超9個贊
根據我們作為評論的討論,我現在可以理解您的意思以及您的實際問題是什么。
當您在 elasticsearch 中使用默認值時,elasticsearch 正在使用標準分析器分析您的文本,該分析器基本上將您的文本拆分為標記。當您使用匹配查詢在該字段上進行搜索時,將應用相同的分析過程。這意味著您的查詢文本也被分解為標記。該match查詢運行“或”所有生成的標記。
您可以在 Kibana 開發者控制臺中復制和粘貼的以下示例顯示:
DELETE test
PUT test
PUT test/_doc/1
{
"name": "???? ??? ?????? 3+1?_? 4?"
}
PUT test/_doc/2
{
"name": "???? ?????? 4?"
}
GET test/_search
{
"query": {
"match": {
"name": "???? ??? ?????? 3+1?_? 4?"
}
}
}
它給出了以下結果:
{
"took" : 12,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 1.7260926,
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.7260926,
"_source" : {
"name" : "???? ??? ?????? 3+1?_? 4?"
}
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.8630463,
"_source" : {
"name" : "???? ?????? 4?"
}
}
]
}
}
如果您沒有在索引設置中定義任何分析器,那么可能elasticsearch 生成了一個.keyword未分析的子字段。您可以像這樣查詢:
GET test/_search
{
"query": {
"term": {
"name.keyword": "???? ??? ?????? 3+1?_? 4?"
}
}
}
這現在只提供完全匹配:
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"name" : "???? ??? ?????? 3+1?_? 4?"
}
}
]
}
}
如果您知道永遠不會運行全文搜索,而只會運行完全匹配,并且不需要對name字段進行聚合或排序,那么您可以按如下方式定義索引:
DELETE test
PUT test
{
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text",
"analyzer": "keyword"
}
}
}
}
}
PUT test/_doc/1
{
"name": "???? ??? ?????? 3+1?_? 4?"
}
PUT test/_doc/2
{
"name": "???? ?????? 4?"
}
GET test/_search
{
"query": {
"term": {
"name": "???? ??? ?????? 3+1?_? 4?"
}
}
}
這也給出了一個結果,并且比默認行為需要更少的磁盤空間。

TA貢獻1802條經驗 獲得超10個贊
正如您所懷疑的那樣,我認為 elasticsearch 會根據它們在您的數據中匹配它們時產生的排名,為您簡單地生成 10 個結果。
嘗試這個:
body = {
'from': 0,
'size': 1,
'query': {
'bool': {
'must': [
{
'match': {
'Category' : 'category name',
}
},
{
'match' : {
'name' : 'product name'
}
}
]
}
}
}
來源:https : //www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html
添加回答
舉報