2017-07-26 45 views
0

参照这里的例子 https://www.elastic.co/guide/en/elasticsearch/guide/current/ngrams-compound-words.htmlelasticsearch正克例如澄清

报价寻找“阿德勒”返回结果。 对“Adler”的搜索成为adl,dle和ler三个词的查询:

但为什么查询“Zdler”返回结果,即使zdl不是其中一个术语?

GET /my_index/my_type/_search 
{ 
    "query": { 
     "match": { 
      "text": { 
      "query": "zdler" 
      } 
      } 
     } 
} 

将匹配查询应用于“Adler”上的搜索将返回预期的记录。

但是,“Zdler”上的匹配查询也返回记录(因为dle和ler匹配)。即使设置“minimum_should_match”:“100%”返回该记录 - 预计不会

申请期限查询的“阿德勒”搜索返回什么 - 预计不会

POST /my_index/my_type/_search 
    { 
    "query": { 
     "term": { 
      "text": { 
      "value": "Adler" 
      } 
     } 
     } 
    } 

如何实现返回只记录搜索“Adler”而不是“Zdler”?

"settings": { 
    "index": { 
    "number_of_shards": "5", 
    "provided_name": "my_index", 
    "creation_date": "1501069624443", 
    "analysis": { 
     "filter": { 
     "trigrams_filter": { 
      "type": "ngram", 
      "min_gram": "3", 
      "max_gram": "3" 
     } 
     }, 
     "analyzer": { 
     "trigrams": { 
      "filter": [ 
      "lowercase", 
      "trigrams_filter" 
      ], 
      "type": "custom", 
      "tokenizer": "standard" 
     } 
     } 
    }, 
    "number_of_replicas": "1", 
    "uuid": "Z5BXi_RjTACzTsR_-Nu9tw", 
    "version": { 
     "created": "5040099" 
    } 
    } 
} 

并且这些映射

{ 
"my_index": { 
"mappings": { 
    "my_type": { 
    "properties": { 
     "text": { 
     "type": "text", 
     "analyzer": "trigrams" 
     } 
    } 
    } 
} 
+0

很简单,因为'dle'和'ler'也匹配 – Val

回答

1

match query投掷查询之前施加于所述输入查询的字段分析器。这同样产生用于输入的令牌(“zdler”),然后再次匹配反向索引。但条款查询不会出现这种情况,因为它不适用现场分析仪输入值

匹配查询将“adler”分成 - >“a”,“d”,“l”,“e” .....然后将其与倒排索引进行匹配。

试着去了解遵循两个查询

POST index5/_search 
{ 
    "query": { 
    "match": { 
     "text": "zdler" 
    } 
    } 
} 


POST index5/_search 
{ 
    "query": { 
    "term": { 
     "text": { 
     "value": "zdler" 
     } 
    } 
    } 
} 
+0

我已经加入到根据您的回答这个问题的更多信息。 – Akshata

+0

也如果你可以添加设置和映射? – user3775217

+0

已添加设置和映射 – Akshata

0

的解决方案是应用标准分析仪进行搜索。在查询下面的 返回记录并且搜索“zdler”将不返回任何结果。

GET /my_index_2/my_type/_search 
{ 
"query": { 
    "match": { 
     "text": { 
      "query": "adler", 
      "analyzer": "standard" 
     } 
    } 
    } 
}