elasticsearch 弹性搜索中的阿拉伯文发音符号,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 弹性搜索中的阿拉伯文发音符号,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 弹性搜索中的阿拉伯文发音符号

elasticsearch 弹性搜索中的阿拉伯文发音符号,elasticsearch,lucene,elasticsearch,Lucene,我有一个案例,我想使用elasticsearch作为文本搜索引擎,搜索非常长的HTML阿拉伯语文本 除了带有变音符号的单词外,搜索效果相当不错,它似乎无法识别它们 例如: 这句话:“وَهكَذافُلّكٍْ”(这是存储在数据库中的一句) 与此完全相同:这是用户输入的搜索内容) 除了添加的变音符号,它们在计算机中作为单独的字符处理(但只是在其他字符之上呈现),情况完全相同 我想知道是否有办法让搜索忽略所有的发音符号 我考虑的第一种方法是,是否有一种方法可以告诉elasticsearch在索引时

我有一个案例,我想使用elasticsearch作为文本搜索引擎,搜索非常长的HTML阿拉伯语文本

除了带有变音符号的单词外,搜索效果相当不错,它似乎无法识别它们

例如:

这句话:“وَهكَذافُلّكٍْ”(这是存储在数据库中的一句)

与此完全相同:这是用户输入的搜索内容)

除了添加的变音符号,它们在计算机中作为单独的字符处理(但只是在其他字符之上呈现),情况完全相同

我想知道是否有办法让搜索忽略所有的发音符号

我考虑的第一种方法是,是否有一种方法可以告诉elasticsearch在索引时完全忽略变音符号(类似stopwords?)


如果不是,是否适合在文档中使用另一个字段(文本\u规范化),在将其添加到elasticsearch之前手动删除变音符号,这是否有效?

要解决您的问题,您可以使用阿拉伯语\u规范化标记过滤器,它将在索引之前从文本中删除变音符号。您需要定义一个自定义分析器,并且您的分析器应该如下所示:

"analyzer": {
    "rebuilt_arabic": {
      "tokenizer": "standard",
      "filter": [
        "lowercase",
        "decimal_digit",
        "arabic_stop",
        "arabic_normalization",
        "arabic_keywords",
        "arabic_stemmer"
      ]
    }
  }
分析器API检查:

GET /_analyze
{
  "tokenizer" : "standard",
  "filter" : ["arabic_normalization"],
  "text" : "وَهَكَذَا في كُلّ عَقْدٍ"
}
来自分析仪的结果:

{
  "tokens" : [
    {
      "token" : "وهكذا",
      "start_offset" : 0,
      "end_offset" : 9,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "في",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "كل",
      "start_offset" : 13,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "عقد",
      "start_offset" : 18,
      "end_offset" : 24,
      "type" : "<ALPHANUM>",
      "position" : 3
    }
  ]
}
{
“代币”:[
{
“代币”:“代币”,
“起始偏移量”:0,
“端部偏移”:9,

“键入”:“

要解决您的问题,您可以使用阿拉伯文规范化标记过滤器,它将在索引之前删除文本中的变音符号。您需要定义自定义分析器,并且您的分析器应如下所示:

"analyzer": {
    "rebuilt_arabic": {
      "tokenizer": "standard",
      "filter": [
        "lowercase",
        "decimal_digit",
        "arabic_stop",
        "arabic_normalization",
        "arabic_keywords",
        "arabic_stemmer"
      ]
    }
  }
分析器API检查:

GET /_analyze
{
  "tokenizer" : "standard",
  "filter" : ["arabic_normalization"],
  "text" : "وَهَكَذَا في كُلّ عَقْدٍ"
}
来自分析仪的结果:

{
  "tokens" : [
    {
      "token" : "وهكذا",
      "start_offset" : 0,
      "end_offset" : 9,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "في",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "كل",
      "start_offset" : 13,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "عقد",
      "start_offset" : 18,
      "end_offset" : 24,
      "type" : "<ALPHANUM>",
      "position" : 3
    }
  ]
}
{
“代币”:[
{
“代币”:“代币”,
“起始偏移量”:0,
“端部偏移”:9,
“类型”: