- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
可能重复:How to use prefix wildcards like '*abc' with match-against
但是我找不到我的答案所以问了这个问题,抱歉重复了。
我正在 MySQL 中执行查询
记录是:
like %john d% 将匹配前两个结果,因为它们的顺序相同,并且 Wilds 将匹配记录中的任何位置但在大型数据集中,这会降低性能
所以我用谷歌搜索并找到了MATCH AGAINST IN BOOLEAN MODE作为替代方案。现在,我的搜索词是:john d试过了
AGAINST('"john d"')
AGAINST('john d*')
AGAINST('+john +d') etc
我只想获得顺序相同的结果。(例如 1. i am john doe。2. john doe is a man)对于这个搜索词 john d 但我无法实现。 like %john d% 给出了我想要的但它会破坏性能。我怎样才能在 MySQL 中以快速的性能获得我想要的结果。
可能重复:How to use prefix wildcards like '*abc' with match-against
@GolezTrol 提供了一个创建单独列的解决方案,他在其中反转了字符串:
user_login user_login_rev
xyzabc cbazyx
然后,我们可以查找“john d%”而不是查找 '%john d',如果该列已被索引,这会快得多。
但是
@PeerBr 请注意,如果您想从字符串的中间查找内容,反转字符串对您没有帮助。您不会通过使用正常索引键入 'Blue%' 或使用反转索引反转 'Blue%' 来找到 "Jimmy Blue Jones" .
谢谢
最佳答案
对于 Solr 这应该可以很好地处理字段 with a KeywordTokenizer and a ReverseWildcardFilter :
<fieldType name="c_string" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
</fieldType>
根据您的用例,您可以删除 ASCIIFoldingFilterFactory。 LowerCaseFilterFactory 确保字符串正确小写,而 KeywordTokenizer 将整个字符串保持为单个标记 - 这样您就不会匹配示例中的大小写 #3。
ReversedWildcardFilter 也以相反的顺序存储标记,当它检测到前缀通配符时,它还会附加一个反向标记前缀搜索,因此您仍然可以从索引标记中获得良好的性能。
关于php - 如何使用 solr 等在 MySQL 中使用 match-against 获得与 %someword% 相同的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41096001/
我想创建基于特定格式的链接。 当我输入这个时: 谷歌->苹果 我想得到这个链接: https://www.google.hu/search?q=apple 我尝试过这种方式,但不幸的是它不起作用: /
我想做一个函数IsWordPronounceable(SomeWord:String): boolean; “英语”我正在使用 SAPI 语音识别,我需要这个功能。我使用 delphi 编译器,C/C
可能重复:How to use prefix wildcards like '*abc' with match-against 但是我找不到我的答案所以问了这个问题,抱歉重复了。 我正在 MySQL
我是一名优秀的程序员,十分优秀!