当前位置: 首页 > 面试题库 >

在Elasticsearch和Lucene 4.4中使用shingle疹和停用词

朱博实
2023-03-14
问题内容

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

{
  "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": "",
  },
...
}


 类似资料:
  • 将以下内容添加到对象映射器: 任何帮助或指点我的错误将是感激的。

  • 问题内容: 在阅读 Tyre 文档时,我的印象是您应该使用或方法,因为(我的理解是。)使用来填充。 问题是,我找到了一些同时使用两者的教程。为什么? 基本上,我的应用程序现在可以与一起使用,但是我无法弄清楚如何设置某些属性的提升值(因此,我开始查看映射的原因),我想知道同时使用这两个属性是否会产生一些冲突。 问题答案: 尽管和方法是相关的,但实际上它们有两个不同的目的。 该 方法的目的是为索引内的

  • 问题内容: 我在让NEST的DeleteByQuery方法工作时遇到了一些困难。 很简单,查询永远找不到要删除的内容,我也不知道为什么。我正在使用相同的查询来返回记录(使用搜索),并且一切正常。 我只是刚刚开始使用NEST,所以我确定这是一个非常简单的问题,而且我有点昏暗! 任何帮助/建议,不胜感激。 问题答案: 的是上的.NET方法支票是否相等。 如果您更改对它的呼叫,则应该可以使用。

  • 我无法在Elasticsearch中索引GeoJSON数据并用它们创建平铺地图。 -->将GeoJSON发送到ES: curl-xget“http://localhost:9200/datas/data/_mapping” =>{“已确认”:true} =>{“datas”:{“mappings”:{“data”:{“properties”:{“geometry”:{“type”:“geo_sha

  • 我有一个如下所示的Java类(GeoPoint是一个Elasticsearch类型): 我使用的Elasticsearch映射是: 当尝试对其进行索引时,我得到以下异常: org.elasticsearch。ElasticsearchParseException:字段必须为lat/lon或geohash 异常从GeoUtils类的第381行抛出。它发生在映射类中检查双lat和lon字段之后,就像地

  • 问题内容: 我正在尝试遵循Elasticsearch 5官方文档来设置传输客户端: https://www.elastic.co/guide/zh-CN/elasticsearch/client/java- api/5.0/transport- client.html 但是,使用包org.elasticsearch:elasticsearch:5.0.0-rc1时,类PreBuiltTranspo