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

在elasticsearch中索引包含数学表达式的文档的最佳方法是什么?

羊舌光赫
2023-03-14
问题内容

我要解决的问题是,我有一堆上下文数学表达式/公式的文档。我想按公式或表达式搜索文档。

到目前为止,根据我的研究,我正在考虑将数学表达式转换为乳胶格式,并作为字符串存储在数据库中(elasticsearch)。

通过这种方法,我可以搜索带有乳胶字符串的文档吗?

a2 + b2 = c2的示例乳胶转换为a ^ {2} + b ^ {2} = c ^ {2}。可以在elasticsearch中搜索此字符串吗?


问题答案:

我同意用户@Lue
E进行了更多修改,并尝试了一种简单的关键字方法,但给了我一些问题,因此我修改了keyword在自己的自定义分析器中使用标记器的方法,该方法可以解决您的大多数用例。

使用自定义分析器进行索引定义

{
    "settings": {
        "analysis": {
            "analyzer": {
                "my_custom_analyzer": {
                    "type": "custom",
                    "tokenizer": "keyword", --> to make it searchable
                    "filter": [
                        "lowercase", --> case insensitive search
                        "trim" --> remove extra spaces
                    ]
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "mathformula": {
                "type": "text",
                "analyzer": "my_custom_analyzer"
            }
        }
    }
}

索引样本文档

 {
        "mathformula" : "(a+b)^2 = a^2 + b^2 + 2ab"
    }

{
    "mathformula" : "a2+b2 = c2"
}

搜索查询(匹配查询,使用相同的索引时间分析器)

{
    "query": {
        "match" : {
            "mathformula" : {
                "query" : "a2+b2 = c2"
            }
        }
    }
}

搜索结果仅包含第一个索引文档

 "hits": [
            {
                "_index": "so_math",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.6931471,
                "_source": {
                    "mathformula": "a2+b2 = c2"
                }
            }
        ]


 类似资料:
  • Lucene提到- 但是我们可以通过IndexWriter.setMaxFieldLength(int)对其进行配置。 我在ElasticSearch-http://localhost:9200/twitter中创建了一个索引,并发布了一个包含40,000个术语的文档。 映射- 我用message字段索引了一个文档,有40,000个术语-message:“text1text2....text400

  • 问题内容: 可能是一个非常愚蠢的问题,检查elasticsearch中文档的字段是否存在的最佳方法是什么?我在文档中找不到任何内容。 例如,如果该文档没有字段/关键字“ price”,那么我不想返回结果。 {“ updated”:“ 2015/09/17 11:27:27”,“ name”:“ Eye Shadow”,“ format”:“ 1.5 g / 0.05 oz”,} 我可以做什么? 谢

  • 我需要计算任意逻辑模型中截断正态分布的CDF。我还没有找到任何可以工作的java软件包(但需要推荐)。我确实在R中找到了一个名为truncnorm的软件包,它对我有用。然而,我正在努力找出调用Truncr包的最佳方式。我正在rJava软件包中试用JRI。我的计划是将JRI添加为一个应用程序。jar文件到AnyLogic模型的依赖项部分,但到目前为止,我很难让它正常工作。 在我继续用JRI把头撞到墙

  • 问题内容: Elasticsearch中的索引是什么?一个应用程序有多个索引还是只有一个索引?假设您为某些汽车制造商构建了一个系统。它涉及人员,汽车,零件等。您是否有一个名为制造商的索引,或者您有一个人的索引,一个用于汽车的索引和一个用于零备件的索引?有人可以解释吗? 问题答案: 很好的问题,答案比人们期望的要细腻得多。您可以将索引用于几种不同的目的。 关系指标 最简单,最熟悉的布局将克隆您从关系

  • 问题内容: 我有一个带有递归parent_id的自引用MySQL表: 在测试期间,我想清空它,但TRUNCATE失败: 我目前必须手动删除所有记录,从树的底部开始向上操作。即使是小树,这也很繁重。 有没有解决此问题的简单方法?我无法在表中轻松地重新创建该表,因为其他表已对其进行引用(我已经将其截断了,所以那里应该没有数据完整性问题)。 问题答案: 为什么不: ?