【问题标题】:Elastic Search fulltext Search弹性搜索全文搜索
【发布时间】:2020-01-27 11:12:34
【问题描述】:

我将两个 PDF 文档的内容保存在 Elastic Search 中。 方向是_source.attachment.content,我想做一个全文搜索。

现在我的 Elastic Search 2 中有两个不同的 PDF,其中包含以下单词:“Overview”和其他不包含此单词的 PDF。

我是这样搜索的:

GET _search
{ 
   "_source":[ 
      "attachment.*",
      "meta.*"
   ],
   "query":{ 
      "bool":{ 
         "must":[ 
            { 
               "multi_match":{ 
                  "query":"Over",
                  "fuzziness":2
               }
            },
            { 
               "match":{ 
                  "meta.teamId":"specific id"
               }
            }
         ]
      }
   }
}

因此,我得到了两个文档之一,以及许多其他文档中没有子字符串“over”。如果我键入“overv”,则不会返回包含此子字符串的文档作为结果。如果我输入“概述”,那么我只会找到我想要的两个文档。

有什么我可以做得更好的吗?

提前谢谢你

编辑: 命中看起来像:

{
        "_index" : "docs",
        "_type" : "_doc",
        "_id" : "UO8RI28B94W61yv-lXqW",
        "_score" : 16.099525,
        "_source" : {
          "attachment" : {
            "date" : "2019-12-20T11:28:13Z",
            "content_type" : "application/pdf",
            "language" : "et",
            "title" : "Microsoft Word - Dokument1",
            "content" : """
Test    PDF 

2345    

Etwas   

Overview
""",
            "content_length" : 42
          },
          "meta" : {
            "teamId" : "specific id"
          }
        }
      }

这是映射:

"mappings" : {
  "properties" : {
    "attachment" : {
      "properties" : {
        "content" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "contentId" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    }
    "meta" : {
      "properties" : {
        "teamId" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "teamId" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    }
  }
}

【问题讨论】:

  • 请分享您的索引映射以及这些文档上的一些示例文档和示例输出
  • @OpsterESNinja 我编辑了一些东西。你是这个意思吗?
  • 是的,谢谢你的信息,我会调查一下
  • @OpsterESNinja 你知道吗?
  • 我仍然没有看到示例文档,还请确保您的问题格式正确且步骤清晰,以便我们可以重现您的问题并为您提供帮助:)

标签: elasticsearch full-text-search elasticsearch-analyzers


【解决方案1】:

您需要使用 nGram 标记器 (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html) 为您的数据建立索引

您可以在此处阅读更多信息 - https://qbox.io/blog/an-introduction-to-ngrams-in-elasticsearch

【讨论】:

  • 您需要使用 ngram 标记器为您的数据建立索引。基本上,在存储在 elasticsearch 中时,它将存储所有组合,因此在进行查询时,您也可以搜索不完整的单词。
  • 如果我尝试这个,我总是会出现“Id is already exists”之类的错误
猜你喜欢
  • 2018-02-03
  • 1970-01-01
  • 2017-03-31
  • 2023-04-01
  • 2017-06-13
  • 2018-10-26
  • 2021-11-23
  • 2022-08-12
  • 1970-01-01
相关资源
最近更新 更多