我们一直在尝试使用我们的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
}
}
]
}
}
}
}
}
}
}
答案 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