在一致的结果中,在查询中返回空格



Using NEST.

我有以下代码。

QueryContainerDescriptor<ProductIndex> q
var queryContainer = new QueryContainer();
queryContainer &= q.Match(m => m.Field(f => f.Code).Query(parameters.Code));

我想同时拥有这两个标准

代码=水果 12//带空格

代码=FRUIT12//无空格

退回产品 1 和 2

现在

如果我设置代码=FRUIT 12,我会得到产品 1 和 2//带空格

如果我设置 code=FRUIT12//没有空格,我只会得到产品 2

示例数据 产品

[
{
"id": 1,
"name": "APPLE",
"code": "FRUIT 12"
},
{
"id": 2,
"name": "ORANGE",
"code": "FRUIT12"
}
]

默认情况下,字符串字段将具有standard分词器,它将为"FRUIT12"输入发出单个标记"FRUIT12"。

您需要在字段分析器中使用word_delimiter令牌筛选器,以允许预期的行为:

GET _analyze
{
"text": "FRUIT12",
"tokenizer": "standard"
}

{
"tokens": [
{
"token": "FRUIT12",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
}
]
}

-----------和

GET _analyze
{
"text": "FRUIT12",
"tokenizer": "standard",
"filters": ["word_delimiter"]
}

{
"tokens": [
{
"token": "FRUIT",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "12",
"start_offset": 5,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 1
}
]
}

如果在字段上添加word_delimiter令牌筛选器,则此字段上的任何搜索查询也将启用word_delimiter令牌筛选器(除非您在映射中使用search_analyzer选项覆盖它(

因此"FRUIT12"单词查询将被"翻译"为["FRUIT", "12"]多词查询。

最新更新