gpt4 book ai didi

elasticsearch - Elasticsearch 中不区分大小写的字段

转载 作者:行者123 更新时间:2023-11-29 02:48:20 27 4
gpt4 key购买 nike

我将 NEST 与 ElasticSearch 结合使用,并尝试通过允许用户在搜索框中键入搜索短语来进行搜索。除了当用户输入搜索短语时他们需要确保字段名称与 Elastic 搜索中的字段名称大小写相同之外,一切都运行良好。

例如,我的字段之一称为 bookTitle。如果他们像下面这样搜索,那么就可以了

书名:《两个城市的故事》

如果他们像下面的例子那样搜索是行不通的

书名:“两个城市的故事”书名:《两个城市的故事》

我用来搜索的代码如下。有没有人对我如何解决这个问题有任何想法。我希望有一个 ElasticSearch/NEST 设置允许我执行此操作,而不是对搜索文本做一些丑陋的事情,例如查找“BookTitle”并替换为“bookTitle”。

   public List<ElasticSearchRecord> Search(string searchterm) {

var results = _client.Search<ElasticSearchRecord>(s => s
.Query(q => q
.QueryString(qs => qs
.DefaultField("content")
.Query(searchterm)
)
));


return results.Documents.ToList();
}

非常感谢任何帮助。

最佳答案

Elasticsearch 无法实现您想要的方式。您可以控制映射,定义字段的名称,您是控制查询的人。

根据这种判断,您需要注意用户将在搜索字段中键入的内容,开箱即用的 Elasticsearch 不会帮助您使用小写字段名称或类似的东西。

因此,无论您选择哪种解决方案,它都是一种解决方法。

我的建议是定义一套规则,这些规则也应该传达给您的用户。围绕这些行的东西:

  • 您的字段名称全部小写,或camel-cased
  • 您将映射定义为strict,以便您可以完全控制它
  • 您通知用户(在 Web 界面或 UI 中)他们应该根据一组规则(仅限小写或驼峰式等)搜索字段名称

另一种方法是定义what goes into the _all field .在您的 QueryString 中,您不使用特定的字段名称,ES 将按其默认设置使用 query_string。这意味着 ES 将使用 _all,一个您知道它包含什么的 _all 字段。

只是为了提一下无论如何我不推荐它,我认为你可以使用脚本在 Groovy 中用字段名做任何你想做的事。但是,这意味着您将无法使用 Elasticsearch 的真正力量

如上所述,教育您的用户并定义一套要遵守的规则。

关于elasticsearch - Elasticsearch 中不区分大小写的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com