【问题标题】:ElasticSearch query to return document with this format of textElasticSearch 查询以返回具有这种文本格式的文档
【发布时间】:2019-02-27 20:05:39
【问题描述】:

我们一直在试验我们的 ElasticSearch 实例来构建一个查询,该查询将查找包含非结构化格式文本的文档。这份特殊的文件给我们带来了很大的困难。

这是文档中名为“Text”的字段的内容。

PUBLIC NOTICE – September 2013 NORTH DAKOTA BOARD OF NURSING 919 S 7th Street, Suite 504, Bismarck, ND 58504-5881; (701) 328-9777; Web Site www.ndbon.org PLEASE SHARE THIS INFORMATION WITH YOUR NURSING STAFF The North Dakota Board of Nursing took the following action during the September 19, 2013 meeting: Disciplinary/Board Action Action Name Registration # City/State Time frame Penalty fee Reprimand *Anderson, Merry 106815UAP Minot, ND N/A $200 * Practice without *Buboltz, Ann RN Applicant Redwood Falls, MN N/A $200 License/ Dockter, Amanda L13872 Kensal, ND N/A $900 Registration Jaffe, James R39137 Elkhart, IN N/A $600 *Miller, Cassandra RN Applicant Wahpeton, ND N/A $1,000 *Parker-Sundquist, Charla LPN Applicant Grand Forks, ND N/A $200 Extension of Cofer, Kelly R32728 & L11293 Grand Forks, ND 3 years $1,500 Previous Wattendorf.

请注意文本块末尾的短语“Parker-Sundquist,Charla”。

当搜索名称 Charla Parker-Sundquist 的任何变体时,我们需要在结果集中返回此文档。现在,如果我们搜索 Charla Parker-Sunquist 或搜索 Parker-Sundquist, Charla,我们可以返回文档。但是,我们尝试在 Charla R Parker-Sundquist(包括中间名首字母)上进行搜索,但没有返回该文档。

我们需要调整这个查询(或构建一个额外的),以允许轻微的变化,例如添加中间首字母,并且仍然返回该文档,但是没有 表示应返回包含至少一个搜索词的所有文档的查询。我相信我们需要对这个查询做的是说我们想要返回至少有两个搜索词存在并且两个词彼此接近的任何结果。

这是我们现在的查询。这样,当搜索上述两个变体时,将返回相关文档。但是,只要我们在查询中引入中间名首字母,就不会返回文档。请帮助我了解我们如何调整此查询,而不必说这 3 个单词中的 ANY 可以在文档中以供返回。

   {
        "size": 150,
        "query": {
            "function_score": {
                "query": {
                    "bool": {
                        "must": {
                            "bool": {
                                "should": [
                                    {
                                        "match_phrase": {
                                            "text": {
                                                "query": "charla r parker-sundquist",
                                                "slop": 3
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
   }

编辑:根据一些研究,我们也尝试过这个查询,但是这个查询根本没有带回任何结果,所以我不确定这个查询的语法是否有问题.

{
    "size": 150,
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": {
                        "bool": {
                            "should": [
                                {
                                    "span_near": {
                                        "clauses": [
                                            {
                                                "span_multi": {
                                                    "match": {
                                                        "fuzzy": {
                                                            "text": {
                                                                "value": "charla",
                                                                "fuzziness": 2
                                                            }
                                                        }
                                                    }
                                                }
                                            },
                                            {
                                                "span_multi": {
                                                    "match": {
                                                        "fuzzy": {
                                                            "text": {
                                                                "value": "parker-sundquist",
                                                                "fuzziness": 2
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        ],
                                        "in_order": false,
                                        "slop": 2
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    为了获得完整的搜索自定义,您可以更改索引标记器并使用自定义分析器。:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html

    然后你有更多的搜索选项,你也可以使用 query_string 查询。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

    一些例子: Multiple tokenizers inside one Custom Analyser in Elasticsearch

    【讨论】:

    • 谢谢,但我想我应该提一下,使用新的标记器重新创建索引并不是一个真正的选择。我们总共有 5 个查询在我们的索引上运行(包括上面概述的一个),其他 4 个查询按设计运行得很好。使用新架构重新构建索引很可能会危及我们正常工作的内容。
    • 在这种情况下,您需要了解当前的标记化,以便在可能的情况下根据标记化的方式决定如何查询。使用分析 API 进行检查: GET index-name/_analyze { "text" : "put your text here" }
    • 感谢您的提示。分析查询的结果可以在这里看到:tinypic.com/r/ve3bqd/9你能帮我理解这是什么意思吗?谢谢。
    • 仅供参考,我根据一些研究在帖子中添加了第二个查询。这个也不行。
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2021-10-31
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2021-06-05
    相关资源
    最近更新 更多