Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch elasticsearch edge n-gram标记器:在标记中包含符号_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch elasticsearch edge n-gram标记器:在标记中包含符号,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch elasticsearch edge n-gram标记器:在标记中包含符号,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch elasticsearch edge n-gram标记器:在标记中包含符号

elasticsearch elasticsearch edge n-gram标记器:在标记中包含符号,elasticsearch,nest,elasticsearch,Nest,我正在使用基于Edge NGram标记器的自定义标记器,我希望能够搜索诸如“sport+”之类的字符串,即我希望特殊符号,例如+符号被视为标记的一部分 例如,我们有以下字段的文档: “typeName”:“LC 500h Sport+CVT” 或 “类型名称”:“LC 500h运动CVT” 使用以下子句执行查询: { "match": { "typeName": { "query": "sport+ cvt", "operator": "and"

我正在使用基于Edge NGram标记器的自定义标记器,我希望能够搜索诸如“sport+”之类的字符串,即我希望特殊符号,例如+符号被视为标记的一部分

例如,我们有以下字段的文档:

“typeName”:“LC 500h Sport+CVT”
“类型名称”:“LC 500h运动CVT”

使用以下子句执行查询:

{
  "match": {
    "typeName": {
      "query": "sport+ cvt",
        "operator": "and"
    }
  }
}
获取两个文档。但是,在这种情况下,我们只希望返回带有
“typeName”:“LC 500h Sport+CVT”
的文档

我们在标记器设置中使用了以下标记字符类:
数字
字母
标点
。我认为添加
symbol
作为token\u chars类并重新创建索引会起到作用,但没有起到任何作用

编辑: 以下是嵌套语法中的分析器定义:

设置(s=>s)
.Analysis(=>
_.分析仪(a=>a
.习俗(
“车辆分析器”,
描述符=>描述符
.Tokenizer(车载数据记录器)
.Filters(“小写”))
.标准(“车辆研究”,
描述符=>描述符)
.Tokenizer(描述符=>描述符
埃金格拉姆先生(
汽车发动机,
tokenizerDescriptor=>
标记描述符
明格拉姆先生(1)
.MaxGram(10)
.代币(
TokenChar.Digit,
一封信,
符号,标点符号,
TokenChar.Symbol(()()))
如标记字符中所述:

应包含在标记中的字符类。弹性搜索 将在不属于指定类的字符上拆分。 默认为[](保留所有字符)


默认情况下,elasticsearch保留所有字符。仅当您希望反转索引中的字符类更少时,才应使用此选项。因此,要解决您的问题,您只需删除token_chars的定义:您的标记器将保留所有字符

您可以共享您的analyzer定义吗?@Lupanoide我以嵌套语法添加了analyzer定义,因为这是我们实际创建它的方式。谢谢不过,这是否考虑了空格
whitespace
也是一个有效的token\u chars类,但我们不希望在token中包含空格字符。我尝试在不指定
token\u chars
的情况下重新创建索引。分析器确实正确处理空白。但是,原来的问题仍然存在:对
sport+cvt
的查询会同时找到
sport+cvt
sport-cvt
@Developer-Ok。进行匹配查询时,查询也会标记化,以便将vehicleTokenization应用于sport+并查找sport。也许您应该尝试匹配短语查询幸运的是,
匹配短语
也有同样的问题:(另外,
match\u phrase
似乎不符合其他一些要求,例如,它不会为
lc cvt
之类的查询生成结果,因为
lc
cvt
两个词在搜索的文档中并不相邻。您是对的,在这种情况下,您应该在查询时强制使用另一个分析器-例如le标准。它将在空格上标记。然后您应该实现搜索\ u分析器。请阅读此处解释EdgeGram和搜索\ u分析器的部分