ElasticSearch查询以此文本格式返回文档

时间:2019-02-27 20:05:39

标签: elasticsearch

我们一直在尝试使用我们的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上搜索,或者在Charla Parker-Sundquist上搜索,我们就可以返回文档。但是,我们尝试在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
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
   }

EDIT :根据一些研究,我们也尝试了此查询,但是此查询根本不会返回任何结果,因此我不确定语法是否会偏离此查询

{
    "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
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

为了获得完全的搜索自定义,您可以更改索引标记器并使用自定义分析器。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