我试图将以下SQL转换为NHibernate:
SELECT * FROM dbo.Customer
WHERE FirstName + ' ' + LastName LIKE '%' + 'bob smith' + '%'
Run Code Online (Sandbox Code Playgroud)
我试图做这样的事情,但它不起作用:
name = "%" + name + "%";
var customers = _session.QueryOver<Customer>()
.Where(NHibernate.Criterion.Restrictions.On<Customer>(c => c.FirstName + ' ' + c.LastName).IsLike(name))
.List();
Run Code Online (Sandbox Code Playgroud)
我基本上要做的是能够在文本框中搜索客户名称,其示例值为"bob smith",并使用上面SQL中的LIKE表达式搜索数据库.
如果我要错误地搜索FirstName和LastName列,请帮我一个替代方案,但上面的SQL查询可以得到我需要的东西.
更新2个解决方案:
所以我现在找到了解决这个问题的两种方法.一种是使用Criteria API.以下帖子的答案非常有用:https://stackoverflow.com/a/2937100/670028
我找到了另一个解决方案,感谢我的一位有用的同事建议使用LINQ投影和匿名类型.这是使用LINQ的解决方案:
var customers = session.Query<Customer>()
.Select( x => new { FullName = x.FirstName + " " + x.LastName, Customer = x } )
.Where( x => x.FullName.Contains( "Bob Smith" ) ) …Run Code Online (Sandbox Code Playgroud) 我正在搜索由OpenGrok索引的代码库,-a选项已启用,允许搜索词的第一个字符为通配符.我想找到所有出现的带有foo一些字符串参数的方法(foo("")在字符串中有一个或多个字符),并且该方法在变量的5个字内bar.
随着标准标记化器提供的单词分解,我可以使用它+full:"foo bar"~5来使所有foo(附近bar,但排除无参数方法是一个问题,因为("索引为两个空白字符,所以例如foo("jar") 似乎匹配foo AND \ \ AND jar AND \ \".该语法看起来并不像它支持这种组合(即使没有通配符的字符串,而不是搜索"jar")与""~5邻近搜索.有关如何实现全部或部分内容的任何想法,因为目前不能更改令牌器吗?
我将shell从bash更改为zsh,我想知道是否可以像Sublime Text调色板一样模糊完整命令.我认为这种搜索,完成的概念必须无处不在.节省了大量时间.
示例:
cd dcmts -> cd Documents
cd dwnls/mnf -> cd Downloads/MyNewFolder
我看到了以下项目,但这并不是很有说服力.
并且似乎可以定义一些设置或算法来配置zsh在完成时的行为.
zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 10 numeric
之前两个解决方案的问题是文件夹在完成时不会出现在列表的顶部,而通常是用户想要的.
如果您有任何有趣的.zshrc模糊搜索,那将会很有趣.
谢谢你的帮助.
我正在尝试使用模糊结果进行匹配查询,并根据编辑距离对结果进行排序。然而,elasticsearch 返回一个基于频率和每个查询的相关性分数 (_score)。无论如何,有没有办法仅从elasticsearch 获取编辑距离。另外,编写我自己的自定义函数来计算编辑距离是否会减慢搜索速度?
我有两组数据。现有客户和潜在客户。
我的主要目标是弄清楚是否有任何潜在客户已经是现有客户。但是,跨数据集的客户命名约定是不一致的。
现有客户
Customer / ID
Ed's Barbershop / 1002
GroceryTown / 1003
Candy Place / 1004
Handy Man / 1005
Run Code Online (Sandbox Code Playgroud)
潜在客户
Customer
Eds Barbershop
Grocery Town
Candy Place
Handee Man
Beauty Salon
The Apple Farm
Igloo Ice Cream
Ride-a-Long Bikes
Run Code Online (Sandbox Code Playgroud)
我想写一些像下面这样的选择语句来达到我的目标:
SELECT a.Customer, b.ID
FROM PotentialCustomers a LEFT JOIN
ExistingCustomers B
ON a.Customer = b.Customer
Run Code Online (Sandbox Code Playgroud)
结果将类似于:
Customer / ID
Eds Barbershop / 1002
Grocery Town / 1003
Candy Place / 1004
Handee Man / 1005
Beauty Salon / NULL …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个模糊匹配算法,我想使用一些带有测试数据的示例查询来评估它的召回率。
假设我有一个包含文本的文档:
{"text": "The quick brown fox jumps over the lazy dog"}
Run Code Online (Sandbox Code Playgroud)
我想看看我是否可以通过测试诸如“sox”或“hazy drog”而不是“fox”和“lazy dog”之类的查询来检索它。
换句话说,我想向字符串添加噪音以生成拼写错误的单词(错别字)。
自动生成带有拼写错误的单词以评估模糊搜索的方法是什么?
我正在检查 4 个相同的数据框列中是否有类似的结果(模糊匹配),我有以下代码作为示例。当我将它应用到真正的 40.000 行 x 4 列数据集时,会一直运行在永恒中。问题是代码太慢了。例如,如果我将数据集限制为 10 个用户,则计算需要 8 分钟,而需要 20、19 分钟。有什么我想念的吗?我不知道为什么这需要那么长时间。我希望在 2 小时或更短的时间内获得所有结果。任何提示或帮助将不胜感激。
from fuzzywuzzy import process
dataframecolumn = ["apple","tb"]
compare = ["adfad","apple","asple","tab"]
Ratios = [process.extract(x,compare) for x in dataframecolumn]
result = list()
for ratio in Ratios:
for match in ratio:
if match[1] != 100:
result.append(match)
break
print (result)
Run Code Online (Sandbox Code Playgroud)
输出:[('asple', 80), ('tab', 80)]
我在 ElasticSearch 中使用模糊搜索选项。它太酷了。
但是我在搜索有空格的值时遇到了一个问题。例如说我有两个值:
"Pizza"
"Pineapple Pizza"
Run Code Online (Sandbox Code Playgroud)
我使用以下查询搜索 Pizza:
client.search({
index: 'food_index',
body: {
query: {
fuzzy: {
name: {
value: "Pizza",
transpositions: true,
}
},
}
}
})
Run Code Online (Sandbox Code Playgroud)
返回的值是:
"Pizza"
"Pineapple Pizza"
Run Code Online (Sandbox Code Playgroud)
这是预期的。但是,如果我在查询中输入值“Pineapple Pizza”:
client.search({
index: 'food_index',
body: {
query: {
fuzzy: {
name: {
value: "Pineapple Pizza",
transpositions: true,
}
},
}
}
})
Run Code Online (Sandbox Code Playgroud)
返回的值是:
""
Run Code Online (Sandbox Code Playgroud)
空的
这是为什么?它应该是完全匹配的。我正在考虑将所有包含空格的名称切换为下划线。所以“Pineapple Pizza”将是“Pineapple_Pizza”(这个解决方案对我有用)。但我问这个问题是希望找到更好的选择。我在这里做错了什么?
我有一个场景,我有需要能够搜索的非正式通信数据。因此,我想要全文搜索,但我也要弄清楚拼写错误。问题是如何考虑拼写错误以便能够进行模糊全文搜索?
这在Postgres Full Text Search is Good Enough中非常简要地讨论过,该文章讨论了拼写错误。
所以我建立了一个“文档”表,创建了索引等。
CREATE TABLE data (
id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
text TEXT NOT NULL);
Run Code Online (Sandbox Code Playgroud)
我可以创建一个额外的 tsvector 类型的列并相应地索引......
alter table data
add column search_index tsvector
generated always as (to_tsvector('english', coalesce(text, '')))
STORED;
create index search_index_idx on data using gin (search_index);
Run Code Online (Sandbox Code Playgroud)
例如,我有一些文本,其中数据显示“气球”,但有人可能会搜索“气球”,所以我插入了两行(一排故意拼错)...
insert into data (text) values ('baloon');
insert into data (text) values ('balloon');
select * from data;
id | text | search_index
----+---------+--------------
1 | …Run Code Online (Sandbox Code Playgroud) 我有以下数据框:
d_test = {
'name' : ['South Beach', 'Dog', 'Bird', 'Ant', 'Big Dog', 'Beach', 'Dear', 'Cat'],
'cluster_number' : [1, 2, 3, 3, 2, 1, 4, 2]
}
df_test = pd.DataFrame(d_test)
Run Code Online (Sandbox Code Playgroud)
我想识别name列中相似的名称(如果这些名称属于一个簇编号)并为它们创建唯一的 ID。例如South Beach和Beach属于簇号1,它们的相似度得分相当高。所以我们将它与唯一的 id 关联起来,比如说1。下一个簇是数字2,列中的三个实体name属于该簇:Dog、Big Dog和Cat。Dog并且Big Dog具有很高的相似度分数,并且他们的唯一 ID 将是,比如说2。对于Cat唯一的 id 来说,是3。等等。
我为上面的逻辑创建了一个代码:
# pip install thefuzz
from thefuzz import fuzz …Run Code Online (Sandbox Code Playgroud) fuzzy-search ×10
python ×3
search ×2
sql ×2
c# ×1
duplicates ×1
fuzzy-logic ×1
fuzzywuzzy ×1
javascript ×1
linq ×1
lucene ×1
nhibernate ×1
nlp ×1
node.js ×1
opengrok ×1
pandas ×1
postgresql ×1
proximity ×1
sublimetext ×1
t-sql ×1
zsh ×1