我正在寻找一个小型PHP/MySQL应用程序的模糊搜索.具体来说,我有一个包含大约2400条记录的数据库(记录每年增加约600条记录,因此它是一个小型数据库).三个感兴趣的领域是街道地址,姓氏和日期.我希望能够通过其中一个字段进行搜索,并且基本上可以容忍拼写/字符错误.即,"123 Main Street"的地址也应该与"123 Main St","123 Main St.","123 Mian St","123 Man St","132 Main St"等相匹配.和日期.
我遇到的主要问题是对其他类似问题的回答:
有什么建议?我知道用MySQL本身做不可能,但由于数据集非常有限,我想保持它相对简单......也许是一个获取数据库所有记录的PHP类,使用某种比较算法,并返回类似记录的ID?
谢谢你,杰森
在TextMate中,有一个名为"转到文件"的功能,用于文件导航.这是一个框,您可以在其中键入项目中文件的名称,它将使用模糊匹配生成候选文件列表,您可以从中选择.
其他编辑器具有此功能,但它们各自给它一个不同的名称:
Vim fuzzyfinder
Emacs模糊查找项目
TextMate转到文件(模糊)
Eclipse OpenResource(不模糊)
Eclipse GotoFile(模糊)
Komodo转到文件(不模糊)
Netbeans转到文件(不模糊)
jEdit,Geany或Ultraedit是否具有此功能?
我有一个大型数据库,里面有一系列机构(大学,医院等).机构的名称来自不同的来源,并且对于同一机构可以拼写不同.例如,它们可能拼写错误,或者可以缩短单词("uni","univ"或"university")
给定一个我需要插入数据库的名称,有没有一种实用的方法来查找该机构是否已经在数据库中?这不是一个研究项目,所以我正在寻找一个相当快的解决方案.
我正在使用django和postgresql,但我认为并不重要.
假设我有几十亿行文本和几百万个"关键字".任务是通过这些行,看看哪一行包含哪些关键字.换句话说,考虑到地图上 (K1 -> V1),并(K2 -> V2)创建地图(K2 -> K1),其中K1=lineID,V1=text,K2=keywordID和V2=keyword.还要注意:
到目前为止,我最初的想法是解决这个问题如下:
1) Chop up all my keywords into single words and
create a large set of single words (K3)
2) Construct a BK-Tree out of these chopped up keywords,
using Levenshtein distance
3) For each line of data (V1),
3.1) Chop up the text (V1) into words
3.2) For each said word,
3.2.1) Retrieve words (K3) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在R中进行一些模糊匹配,其中我有多个数据字段要匹配.
例如:
try_to_match <- c('seoul korea', 'bisbane', 'korea', 'australia brisbane')
locations <- data.frame(name=c('seoul', 'brisbane'),
country=c('south korea', 'australia'))
Run Code Online (Sandbox Code Playgroud)
我想将用户输入的位置try_to_match与locations数据帧匹配.
现在,关于SO上的R模糊匹配存在类似的问题,并且大多数都是覆盖agrep.但是,当有多个要匹配的单词时,我找不到任何覆盖模糊匹配的内容.
例如,如果我只是对抗locations$name,我会得到"bisbane"到"brisbane"的匹配,正如我所期待的那样.此外,我对其中的国家/地区的各种搜索没有匹配,因为其中locations$name没有国家/地区.
sapply(try_to_match, agrep, locations$name, value=T)
# $`seoul korea`
# character(0)
# $bisbane
# [1] "brisbane"
# $korea
# character(0)
# $`australia brisbane`
# character(0)
Run Code Online (Sandbox Code Playgroud)
所以,我想我也应该与国家相匹配:
sapply(try_to_match, agrep, paste(locations$name, locations$country), value=T)
# $`seoul korea`
# character(0)
# $bisbane
# [1] "brisbane australia"
# $korea
# [1] "seoul south korea"
# $`australia brisbane` …Run Code Online (Sandbox Code Playgroud) 我们使用ElasticSearch搜索数百万个标签.我们的用户应该能够包含布尔运算符(+, - ,"xy",AND,OR,括号).如果没有返回匹配,我们将回退到ES提供的拼写建议并再次搜索.这是我们的查询:
$ curl -XGET 'http://127.0.0.1:9200/my_index/my_type/_search' -d '
{
"query" : {
"query_string" : {
"query" : "some test query +bools -included",
"default_operator" : "AND"
}
},
"suggest" : {
"text" : "some test query +bools -included",
"simple_phrase" : {
"phrase" : {
"field" : "my_tags_field",
"size" : 1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们希望启用模糊匹配,而不是只提供拼写建议的后备.例如,如果用户搜索"stackoverfolw",则ES应返回"stackoverflow"的匹配项.
附加问题: "纠正"拼写错误的表现更好的方法是什么?就像现在一样,我们必须执行两个后续请求,首先是原始搜索词,然后是by ES建议词.
performance search fuzzy-search elasticsearch search-suggestion
我想构建一个应用程序,其中匹配要求文档中的每个标记至少包含一次!
请注意其与标准期望相反.所以文档现在相当小,而查询可能很长.例:
文献:
"elastic super cool".
Run Code Online (Sandbox Code Playgroud)
有效的查询匹配将是
"I like elastic things since elasticsearch is super cool"
Run Code Online (Sandbox Code Playgroud)
我设法从弹性搜索中获得匹配令牌的数量(另请参阅https://groups.google.com/forum/?fromgroups=#!topic/elasticsearch/ttJTE52hXf8).因此在上面的例子中,3个匹配(=文档长度)意味着查询匹配.
但是我怎样才能将它与同义词结合起来???
假设"酷"的同义词将是"好","好"和"好".通过使用同义词标记过滤器,我设法将同义词添加到文档中的每个位置.
因此,以下四个文档每个都有上述查询的3个标记匹配:
"elastic super nice"
"elastic nice cool"
"nice good great"
"good great cool"
Run Code Online (Sandbox Code Playgroud)
但只有第一场比赛是有效的比赛!
我怎样才能避免每个同义词匹配计为一个匹配,尽管它们代表文档中的相同标记?
有任何想法如何解决这个问题?
我读到过滤器可能会解决这个问题,但我仍然不确定打击器是否会按照我想要的方式使用同义词...
想法?
我对filter,tokenizer vs query的使用有点困惑.我可以在索引期间选择ngram过滤器或标记器(通过分析器)我也可以使用multi_field存储相同字段的不同变体以用于查询的不同用法,所以我不应该担心这种方法的灵活性,如下所述:http:/ /jontai.me/blog/2013/02/adding-autocomplete-to-an-elasticsearch-search-application/
当我在分析文本时使用ngram过滤器时,我给出了与使用模糊查询时相同的结果(更好的结果,因为edgeNGram选项不适用于模糊查询.)
所以什么时候我应该使用模糊查询(通过模糊选项或fuzzy_like_this查询...)如果使用过滤器(在索引期间)和简单匹配查询获得更好的结果,并且因为我读它更具可扩展性?
什么时候应该使用ngram tokenizer而不是ngram过滤器?
我有一个保存的记录,Elasticsearch其中包含一个完全等于的字符串Clash of clans
现在我想search这string与Elasticsearch我用这个
{
"query_string" : {
"query" : "clash"
}
}
Run Code Online (Sandbox Code Playgroud)
它的工作完美,但现在如果我写
"query" : "class"
Run Code Online (Sandbox Code Playgroud)
它没有给我任何记录,所以我意识到我应该使用Fuzzy搜索,所以我知道我可以使用fuzziness参数,query_string所以我做了
{
"query_string" : {
"query" : "clas"
"fuzziness":1
}
}
Run Code Online (Sandbox Code Playgroud)
但仍然弹性搜索没有返回任何东西!请帮助,我不能使用Fuzzy查询我只能使用query_string.谢谢
我是弹性搜索的新手,因此我在努力寻找适合我们数据的最佳查询方面有些困难。
想象一下,我想匹配以下单词“ Handelsstandens Boldklub”。
当前,我正在使用以下查询:
{
query: {
bool: {
should: [
{
match: {
name: {
query: query, slop: 5, type: "phrase_prefix"
}
}
},
{
match: {
name: {
query: query,
fuzziness: "AUTO",
operator: "and"
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
当前,如果我正在搜索“手”,它将列出该单词,但是如果我搜索“手”,则该单词将不再像打字时一样列出。但是,如果我以“ Handlesstandens”结尾,则会再次列出该列表,因为模糊不清会引起拼写错误,但仅当我键入整个单词时才如此。
是否可以同时进行短语前缀和模糊性?因此,在上述情况下,如果我在路上打错字,它还会列出单词吗?
因此,在这种情况下,如果我搜索“ Handle”,它将仍然与单词“ Handelsstandens Boldklub”匹配。
或者,还有哪些其他解决方法可以实现上述体验?我喜欢phrase_prefix匹配,因为它还支持草率匹配(因此,我可以搜索“ Boldklub han”,它将列出结果)
还是可以通过使用完成提示器来实现上述目的?
fuzzy-search ×10
lucene ×2
search ×2
autocomplete ×1
database ×1
django ×1
fuzzyfinder ×1
geany ×1
indexing ×1
java ×1
match-phrase ×1
mysql ×1
navigation ×1
performance ×1
php ×1
postgresql ×1
python ×1
r ×1
solr ×1
synonym ×1
text-editor ×1
tokenize ×1