当前位置: 首页 > 知识库问答 >
问题:

在弹性5.4中选择正确的令牌管理器进行仿真包含类似的查询

端木澄邈
2023-03-14

我正在使用Elastic 5.4实现类似建议/完成的功能,并且在为我的需求选择正确的标记器时面临问题。下面的例子是:

本索引共有4份文件,内容如下:

博士1:掌声

DOC 2:苹果

医生3:它是一个苹果

DOC 4:应用

文件5:有一个申请

查询

查询1:查询字符串“App”应返回所有5个文档。

查询2:查询字符串“Apple”应仅返回文档2和文档3。

查询3:查询字符串html" target="_blank">应用程序应该只返回文档4。

查询4:查询字符串appl应该返回所有5个文档。

分词器

我在Elastic中使用以下标记器,我看到查询2和查询3返回的所有文档。

分析器应用于“文本”类型的字段。

"settings": {
    "analysis": {
      "analyzer": {
        "my_ngram_analyzer": {
          "tokenizer": "my_ngram_tokenizer"
        }
      },
      "tokenizer": {
        "my_ngram_tokenizer": {
          "type": "ngram",
          "min_gram": "3",
          "max_gram": "3",
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  }

如何将结果限制为返回包含查询字符串精确匹配的文档(作为现有单词或短语或精确单词的一部分)(我已经提到预期结果在上面的查询中提供)?

共有1个答案

燕砚文
2023-03-14

这是因为您使用的是nGramtokenizer,而不是edgeNGramone。后者只索引前缀,而前者将索引前缀、后缀以及数据的子部分。

将您的analyzer定义改为此,它应按预期工作:

"settings": {
    "analysis": {
      "analyzer": {
        "my_ngram_analyzer": {
          "tokenizer": "my_ngram_tokenizer"
        }
      },
      "tokenizer": {
        "my_ngram_tokenizer": {
          "type": "edge_ngram",          <---- change this
          "min_gram": "3",
          "max_gram": "3",
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  }
 类似资料:
  • 类别表的结构: id 标题 家长id 项目表的结构: id 标题 is_active(0) category_id 表结构 表通过一对多关系与category_id字段相关联。1类可以有很多项。 类别表中的两级层次结构。这定义了主要类别和子类别。类别是那些父项id=NULL的记录。和子类别,这些记录中的父项_id=到某个id。 一个项目可以属于主类别(其中parent_id=null)和子类别(子

  • 问题内容: 我正在尝试查询包含值数组的JSON字段。例如,我们将表命名为“ User ”,并将字段命名为“ Friends ”。这是“朋友”字段的外观: 因此,我想 在User表上查询来自Friends字段的所有内容,其中id等于3 。 就像这样: 当然,如果该字段不包含数组,那么上面的示例可以完美地工作,所以它只是: 绝望了,尽管我知道这是不是很符合逻辑,我试图用“其中”: 。或类似的东西:,,

  • 问题内容: 这有效,但是由于缺少真实性令牌而被停止: 所以我尝试像这样添加它: 并且它正确地将auth_token作为参数传递,但似乎丢失了其余的表单。 无论如何要完成发送有效的表单数据以及真实性令牌的工作? 这是一个Rails环境。我脑子里有这个。 我尝试过的事情 1。 2。 3。 问题答案: 实际上,您正在读取form 的属性并向其发送ajax请求。要发送表单数据,您必须提交表单,也可以序列化

  • 为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。 用精度为65位十进制数(基于10)对DECIMAL列进行所有基本计算(+、-、*、/)。参见11.1.1节,“数值类型概述”。 使用双精度操作对DECIMAL值进行计算。如果准确度不是太重要或如

  • 校验者: 翻译者: @李孟禹 通常,解决机器学习问题的最困难的部分可能是找到恰当的的评估器(estimator)。 不同的评估器更适合不同类型的数据和不同的问题。 下面的流程图是一些粗略的指导,可以让用户根据自己的数据来选择应该尝试哪些评估器。 点击下图的任何评估器,查看其文档。

  • 我每天都面临这个问题,我找了很多,但没有找到任何方便的答案。 每当我启动仿真器时,一段时间后,当我看到DDMS时,它会在线显示仿真器,但它的文件资源管理器是ShowNothing。当我再次重新启动模拟器或重新启动Eclipse时,它再次可见。但是我不想要这个,我想要一个快速的解决方案。 还有一件事,我已经将设备超时设置为较高的值,但它也不起作用。这是我的DDMS的屏幕截图。有人能快速解决吗?提前感