在 Elasticsearch 和 Lucene 4.4 中使用 Shingles 和停用词

2024-03-24

在我正在构建的索引中,我有兴趣运行查询,然后(使用方面)返回该查询的带状疱疹。这是我在文本上使用的分析器:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "shingleAnalyzer": {
          "tokenizer": "standard",
          "filter": [
            "standard",
            "lowercase",
            "custom_stop",
            "custom_shingle",
            "custom_stemmer"
          ]
        }
      },
      "filter": {
        "custom_stemmer" : {
            "type": "stemmer",
            "name": "english"
        },
        "custom_stop": {
            "type": "stop",
            "stopwords": "_english_"
        },
        "custom_shingle": {
            "type": "shingle",
            "min_shingle_size": "2",
            "max_shingle_size": "3"
        }
      }
    }
  }
}

主要问题是,对于 Lucene 4.4,停止过滤器不再支持enable_position_increments参数来消除包含停用词的木瓦。相反,我会得到像这样的结果。

“红色和黄色”

"terms": [
    {
        "term": "red",
        "count": 43
    },
    {
        "term": "red _",
        "count": 43
    },
    {
        "term": "red _ yellow",
        "count": 43
    },
    {
        "term": "_ yellow",
        "count": 42
    },
    {
        "term": "yellow",
        "count": 42
    }
]

自然,这极大地扭曲了退回的带状疱疹的数量。 Lucene 4.4 之后是否有一种方法可以在不对结果进行后处理的情况下管理此问题?


可能不是最好的解决方案,但最直率的方法是在分析器中添加另一个过滤器来删除“_”填充标记。在下面的示例中,我将其称为“kill_fillers”:

   "shingleAnalyzer": {
      "tokenizer": "standard",
      "filter": [
        "standard",
        "lowercase",
        "custom_stop",
        "custom_shingle",
        "custom_stemmer",
        "kill_fillers"
       ],
       ...

将“kill_fillers”过滤器添加到过滤器列表中:

"filters":{
...
  "kill_fillers": {
    "type": "pattern_replace",
    "pattern": ".*_.*",
    "replace": "",
  },
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Elasticsearch 和 Lucene 4.4 中使用 Shingles 和停用词 的相关文章

  • SpatialQuery 使用 Lucene 进行基于位置的搜索

    我的 lucene 索引已索引纬度和经度字段 如下所示 doc Add new Field latitude latitude ToString Field Store YES Field Index UN TOKENIZED doc Ad
  • ElasticSearch 和 PHP 中的多个字段搜索

    我正在使用最新版本弹性搜索 PHP https github com elasticsearch elasticsearch php以及最新版本的 MongoDB 和 ElasticSearch 我需要对可以包含一个或多个值的多个字段进行搜
  • Elasticsearch GET API 获取分片大小

    在 Elasticsearch 2 3 3 中 有没有办法使用返回 JSON 的 GET API 获取分片大小 目前我找到了以下几种获取shard size的方法 这两种方法都存在问题 recovery gt 使用 JSON 进行响应并提供
  • 弹性搜索限制类型的结果

    我有以下查询 queryDefinition query gt bool gt must gt query string gt default field gt all query gt term must no
  • lucene通配符查询带空格

    我有 Lucene 索引 其中包含城市名称 考虑我想搜索 新德里 我有字符串 New Del 我想将其传递给 Lucene 搜索器 并且我期望输出为 New Delhi 如果我生成类似 Name New Del 的查询 它将为我提供所有带有
  • Solr协会

    最近几天我们正在考虑使用 Solr 作为我们选择的搜索引擎 我们需要的大多数功能都是开箱即用的或者可以轻松配置 然而 我们绝对需要的一项功能似乎在 Solr 中被很好地隐藏 或缺失 我将尝试用一个例子来解释 我们有很多实际上是企业的文件
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • `docker-compose up` 与使用环境变量的 `docker compose up`

    我正在尝试使用 Docker Compose 将三节点 Elasticsearch 集群部署到 Azure 容器实例 我松松地跟随这个例子 https www elastic co guide en elasticsearch refere
  • NLTK 可用的停用词语言

    我想知道在哪里可以找到 NLTK 停用词支持的语言 及其键 的完整列表 我找到一个列表https pypi org project stop words https pypi org project stop words 但它不包含每个国家
  • Elasticsearch 中的组合非嵌套和嵌套查询

    我想使用 ES 进行书籍搜索 所以我决定将作者姓名和标题 作为嵌套文档 放入索引中 如下所示 curl XPUT localhost 9200 library search books 1 d author one books title
  • Elasticsearch 与 Cassandra 对比 Elasticsearch 与 Cassandra

    我正在学习 NoSQL 并正在寻找满足客户要求之一的不同选项 在提出这个问题之前我已经查阅了各种资源 一个对NoSQL知之甚少的人 我需要以更快的速度存储数据并读取数据 完全故障安全且易于扩展 能够搜索数据进行分析 我最终得到了一个简短的清
  • 在elasticsearch中映射一本书,具有多个级别,嵌套关系与父子关系

    当为可以搜索多本书的索引创建映射时 最好使用如下所示的嵌套映射 还是使用带有亲子关系 https www elastic co guide en elasticsearch guide current parent child html b
  • 如何在 Kibana 中过滤小于参数的计数器?

    我有一个类似的问题 如何过滤字段greater比 Kibana 上的计数器 https github com elastic kibana issues 9684 https github com elastic kibana issues
  • Elasticsearch,如何使 NEST 地图响应类

    首先 我使用的是NEST 5 5 0 我对远程 elasticsearch index 的使用如下 var node new Uri http distribution virk dk cvr permanent var settings
  • 在elasticsearch中搜索字幕数据

    有以下数据 简单的srt 1 00 02 17 440 gt 00 02 20 375 Senator we re making our final 2 00 02 20 476 gt 00 02 22 501 approach into
  • java中使用多个分隔符分割字符串

    我正在研究一种数据挖掘算法 我需要使用多个单词来标记字符串 我有一个单独的文件 其中包含所有停用词 我需要做的是通过任何作为分隔符的单词 停用词 来标记输入字符串 例如 如果文件包含停用词 a is and of that 输入字符串变为
  • 如何在 DSL 中的术语查询内添加建议

    我的文档如下 id 1 name sachin messi description email protected cdn cgi l email protection type football var sports id 2 name
  • 包含 Elasticsearch 中的查询或部分匹配

    我正在寻找一个 amend 这个词 它可能在数据中以 amending amendment 甚至 amend 的形式出现 搜索此类单词的最佳方法是什么 我知道通配符可以实现这一点 但由于我的代码的其他部分 我被限制不使用它 有哪些不同的方式
  • Lucene 搜索错误堆栈

    我在尝试使用 Lucene 进行搜索时看到以下错误 版本1 4 3 关于为什么我会看到这个以及如何解决它有什么想法吗 Caused by java io IOException read past EOF at org apache luc
  • 嵌套类型的动态映射

    我正在尝试为如下对象创建动态映射 product productId 99999 manufacturerId A0001 manufacturerCode A101LI name Test Product description Desc

随机推荐