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

完成提示符的标记字符串

谢烨烨
2023-03-14
问题内容

想要使用完成建议程序构建电子商务网站的自动完成功能。

这是我的索引:

PUT myIndex
{
    "mappings": {
        "_doc" : {
            "properties" : {
                "suggest" : {
                    "type" : "completion"
                },
                "title" : {
                    "type": "keyword"
                }, 
                "category" : { 
                    "type": "keyword"
                },
                "description" : { 
                    "type": "keyword"
                }
            }
        }
    }
}

现在,当上传广告时,我希望标题字段用于自动完成,因此这就是我上传文档的方式:

POST dummy/_doc
{
  "title": "Blue asics running shoes",
  "category": "sports",
  "description": "Nice blue running shoes, size 44 eu",
  "suggest": {
    "input": "Blue Asics running shoes" // <-- use title
  }
}

问题是,通过这种方式,elasticsearch仅从开始就匹配字符串…即“ Blu”将找到结果,但“ Asic”或“ Run”或“ Sho”将不返回任何内容…

所以我需要做的是像这样标记我的输入:

POST dummy/_doc
{
  "title": "Blue asics running shoes",
  "category": "sports",
  "description": "Nice blue running shoes, size 44 eu",
  "suggest": {
    "input": ["Blue", "Asics", "running", "shoes"] // <-- tokenized title
  }
}

这会很好…但是我应该如何标记我的字段?我知道我可以在c#中拆分字符串,但是无论如何,我可以在Elasticsearch / Nest中做到这一点吗?


问题答案:

完成提示器设计用于使用分析器(而不是数据类型默认的分析器)快速按需搜索 前缀
查询。simple``standard``text

如果您需要标题中 所有 标记上的部分前缀匹配,而不仅仅是标题的开头,那么您可能需要考虑采用以下方法之一:

  1. 使用分析API与分析,将令牌化标题为令牌/条款从中你会想部分前缀匹配,而指数这个集合作为inputcompletion领域。标准分析仪可能是一个很好的起点。

请记住,用于完成提示的数据结构在使用时会保存在内存中,因此文档中的高级基数会增加此数据结构的内存需求。还应考虑到匹配项的“计分”很简单,因为它是由应用于每个输入的权重控制的。

要么

  1. 请勿在此处使用“完成建议程序”,而应将字段设置titletext具有多个字段的数据类型,这些字段包括title应分析(或不分析,keyword例如,使用子字段)的不同方式。

花一些时间使用Analyze
API来构建一个分析器,该分析器允许在标题中任何位置使用部分术语前缀。首先,诸如标准令牌生成器,小写令牌过滤器,Edgengram令牌过滤器以及可能的Stop令牌过滤器之类的工具将使您运行起来。还要注意,您希望搜索分析器执行与索引分析器类似的操作, Edgengram令牌过滤器 除外
,因为无需对搜索输入中的令牌进行ngramming。



 类似资料:
  • 我正在尝试从 html 标签中提取字符串 我知道还有其他类似或甚至相同的问题得到了回答,但这些问题的答案似乎对我不起作用 此输出 不 注意,我使用了来自不同答案的其他正则表达式,得到了相同的结果,我也不熟悉正则表达式,所以这可能是一个无意义的问题。

  • 我有一个长字符串列表,如下所示,我需要提取一个字符串子集并另存为新,列出每个长字符串中两个标记之间的字符。例如,我的两个字符串看起来像这样,使用“.power”作为标记,前面使用“.power”。 我需要提取每个长列表的子集,像这样在“。还有“.力量”- 我提取所有长字符串列表的代码(路径和文件名)如下所示:

  • 问题内容: 我有一个文本文件,其中包含用’|’分隔的数据。我需要获取每个字段(以“ |”分隔)并对其进行处理。文本文件可以显示如下: ABC | DEF || FGHT 我正在使用字符串令牌生成器(JDK 1.4)来获取每个字段值。现在的问题是,我应该在DEF之后得到一个空字符串,但是我没有在DEF和FGHT之间得到空白。 我的结果应该是 -ABC,DEF,“”,FGHT, 但我正在获取 ABC,

  • 问题内容: 我正在用Java 实现分流场算法,这是我的AP计算机科学课的一个附带项目。我已经用Javascript实现了一个简单的脚本,只带有基本的算术表达式(加法,减法,乘法,除法,求幂)。要将其拆分为数组,我要做的是找到每个运算符()以及数字和括号,然后在它们周围放置一个空格,然后将其拆分为数组。例如,将infix字符串制成,然后在空白处分割。 但是,我感觉这种方法非常慢,并且在您开始添加数学

  • 问题内容: 假设我有一个字符串,而我只想提取一部分。 我只知道我感兴趣的部分之前和之后的几个字符1234。 使用字符串可以执行以下操作: 结果,这会给我。 如何在Python中做同样的事情? 问题答案: 使用正则表达式- 文档以供进一步参考 要么:

  • 问题内容: 我希望能够对文本框中的输入字符串进行标记化以进行查询。示例:用户在文本框中输入“ abc xyz 123”。我想做这个: 谢谢。 问题答案: 使用一个字符串拆分函数,您可能会得到如下所示的内容: