Am从Elasticsearch索引中获取文档,并使用whitespace
带分词器的令牌生成器。
请在下面找到我的映射文件。
PUT stemmer_lower_test
{
"settings": {
"analysis": {
"analyzer": {
"value_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"char_filter": [
"html_strip"
],
"filter": ["lowercase", "asciifolding", "my_stemmer"]
}
},
"filter" : {
"my_stemmer" : {
"type" : "stemmer",
"name" : "minimal_english"
}
}
}
},
"mappings": {
"doc": {
"properties": {
"product_attr_value": {
"type": "text",
"analyzer": "value_analyzer"
},
"product_id": {
"type": "long"
},
"product_name":{
"type": "text"
}
}
}
}
}
请找到我正在使用的模糊API:
QueryBuilder qb1 = QueryBuilders.boolQuery()
.must(QueryBuilders.fuzzyQuery("product_attr_value", keyword).boost(0.0f).prefixLength(3).fuzziness(Fuzziness.AUTO).transpositions(true));
如果要搜索value
(小写)并在1555
周围获取计数。如果我搜索Value
(仅大写第一个字符)并得到8979
个计数。
我期望两个计数应该相同。就像我想搜索时不区分大小写。
答案 0 :(得分:0)
模糊查询是一个词级查询,因此,Elasticsearch不会在您的搜索词上应用任何分析器。在将搜索提交给ES之前,您必须对其进行标准化。其他多种查询类型也是如此。
虽然全文查询将在执行之前分析查询字符串,但术语级查询将对存储在倒排索引中的确切术语进行操作
请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/term-level-queries.html