- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
关注
https://github.com/Sitecore/autohaus/blob/master/Autohaus.Custom/Indexing/Analyzers/NGramAnalyzer.cs
我创建了这个自定义分析器
public class NGramAnalyzer : Analyzer
{
private readonly Version _version;
private readonly int _minGram;
private readonly int _maxGram;
public NGramAnalyzer(Version version, int minGram = 2, int maxGram = 8)
{
_version = version;
_minGram = minGram;
_maxGram = maxGram;
}
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
// Splits words at punctuation characters, removing punctuation.
// Splits words at hyphens, unless there's a number in the token...
// Recognizes email addresses and internet hostnames as one token.
var tokenizer = new StandardTokenizer(_version, reader);
TokenStream filter = new StandardFilter(tokenizer);
// Normalizes token text to lower case.
filter = new LowerCaseFilter(filter);
// Removes stop words from a token stream.
filter = new StopFilter(true, filter, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
return new NGramTokenFilter(filter, _minGram, _maxGram);
}
}
我遇到的问题是它以
的形式生成查询[ titleNGram:"his ist sto tor ory" ] instead of [ titleNGram:his ist sto tor ory]
对于[历史]。注意第一个引号
如何让它不引用查询。
我在这里找到了关于 Java Lucene 的类似讨论
https://forum.hibernate.org/viewtopic.php?f=9&t=999916&view=next
有没有一种方法可以解决这个问题而不导致解决方法。
我正在使用 PerFieldAnalyzerWrapper,使用变通方法似乎不会很干净。
感谢任何帮助
最佳答案
我想在我自己的自动完成实现中使用 NGramAnalyzer
,这是生成我正在寻找的我能找到的东西的唯一尝试,所以这就是我开始的地方。
我遇到了您描述的相同问题,并且想出了一个相当干净的解决方法。
原因似乎在 QueryParser.cs:494 处的 Query GetFieldQuery(String field, String queryText)
中。这最终被称为 QueryParser.Parse
的一部分。如果有多个标记要添加到查询中(“his”、“ist”等等是多个标记)并且名为 severalTokensAtSamePosition
的 bool 值是 false,则 GetFieldQuery
构造一个短语查询(第 677 行)并在返回之前将所有标记添加到其中(第 705 行)。
我们想要的是将所有标记添加到 bool 查询中,使用 Occur.SHOULD
。我试图继承 QueryParser
并覆盖 GetFieldQuery
,因为它被标记为 virtual
。但是,我需要复制其余的功能,并且发现有很多对 private
变量的引用。相反,我想出了如何从解析的查询中提取标记并将它们插入到 BooleanQuery
中,然后再运行搜索:
var query = new BooleanQuery();
foreach( var word in terms ) {
var parsed = parser.Parse( word );
var extractedTerms = new HashSet<Term>();
parsed.ExtractTerms( extractedTerms );
foreach( var term in extractedTerms ) {
query.Add( new TermQuery( term ), Occur.SHOULD );
}
}
var resultDocs = searcher.Search( query, maxResults ).ScoreDocs;
这似乎可行。我仍在努力确定 minGram
和 maxGram
的最佳值,以及处理长度小于 minGram
的术语的最佳方法, 但这是一个好的开始。
关于c# - Lucene.Net NGramAnalyzer 使用引用的 ngram 生成查询,例如 [ titleNGram :"his ist sto tor ory"] 而不是 [ titleNGram :his ist sto tor ory],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793262/
这个问题已经有答案了: IST to EST Time Conversion In Java (4 个回答) 已关闭 6 年前。 我正在尝试将 IDT 和 IST 日期解析为 UTC 中的 unixt
关注 https://github.com/Sitecore/autohaus/blob/master/Autohaus.Custom/Indexing/Analyzers/NGramAnalyzer
我有一个以列表作为条目的列表,如下所示: A NULL [[2]] [[2]]$ NULL [[3]] [[3]]$ NULL 正确的做法是什么? 最佳答案 我认为您被“[”和“[[”之间的区别搞糊
这个问题已经有答案了: How do you convert a datetime/timestamp from one timezone to another timezone? (4 个回答) 已
我有一个字符串 Tue Feb 23 10:12:48 IST 2014,我想从中获取 NSdate 对象。我正在使用下面的代码片段 NSString * buildTime = @"Tue
我在两个不同的服务器上有一个 jsp,一个有 liferay 5 和 tomcat 6,另一个有 liferay 6 和 tomcat 7 日期: 偏移量: 在 liferay 5 服务器中,日期
我想将日期时间转换为“印度标准时间”,所以我使用了以下代码:- public static TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystem
我必须按如下格式设置日期: 2014 年 7 月 19 日 10:27:16 中国标准时间 我该怎么做?我应该将“IST”作为字符串对象发送吗? 我试过了- NSDate* sourceDate =
11-10-2016 11:31:51 // Is in IST 我想将上述时间转换为北弗吉尼亚州的等效时间,因为我的 AWS 服务器设置为北弗吉尼亚州。 最佳答案 您可以使用名为 moment.js
我如何确保使用模拟器为所有文件/文件夹正确设置 NSURLIsExcludedFromBackupKey(我目前没有可用的真实设备)? 最佳答案 您可以使用以下方式检查: NSError *error
我有一个时间值以 HH:mm:ss 格式存储在我的数据库中(使用 MySQL 的 time 类型)。此时间将被视为 IST 时区的值。运行我的 Java 代码的服务器遵循 UTC 时区。 如何在 IS
我目前能够获取时间和时区。但它总是打印在 Wed May 23 11:01:08 GMT+05:30 2012 作为 TimeZone,我得到 GMT+05:30。而不是这个我想打印 IST 我试过了
我有以下代码: DateFormat df = new SimpleDateFormat("M/d/yy h:mm a z"); df.setLenient(false); System.out.pr
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do you import an enum into a different namespace i
如何从时区对象获取时区信息? 我有一个 TimeZone java 对象,我需要显示如下信息 例如:IST - 印度标准时间 - (GMT+5.30) 我可以获得 IST - id 和显示名称(印度标
我们正在开发一个 Android 应用程序,其中需要当前日期和时间。我们使用 API 从服务器获取日期和时间。但我们不想一直沟通。实际上,我们有 3 个选项卡。在每个选项卡上,我们都要求服务器提供日期
我想从 IST 输入日期获取加拿大/东部偏移值 例如,如果我输入 2016-03-10 10:01 那么系统返回正确的偏移量为 -05:00 加拿大/东部 但是当我输入 2020-05-28 10:0
我正在使用 iCalender API 在 JAVA 中发送 session 请求。目前,它在 IST 时区工作正常,但在 CST/CDT 或任何其他时区部署相同的应用程序,在生成 session 请
在我的日历中时间显示在 IST在我使用 Google 日历 API 的应用程序中,我得到了 GMT 时间如何在 IST 中获取事件时间,即 GMT+05.30 requ
我的数据库在 UTC 时区和 UTC 时间插入数据。我想对 IST 时间数据的所有值求和并按小时分组。如下所示, id data_id value serverTime 1 2 10
我是一名优秀的程序员,十分优秀!