我有很多 dtSearch 索引,我的目标是找到“TestString-A”和“TestString-B”字符串的所有匹配项。
我使用以下dtSearch请求来查找所有匹配项:"*TestString-B*"
. 这个请求很好 用。它返回所有文档中所有出现的“TestString-B”。
但是当请求是"*TestString-A*"
. 它不会返回任何出现的“TestString-A”,尽管它们是。但是"*TestString*"
请求返回了很多次,包括“TestString-A”。
dtSearch 似乎认为“-A”后缀是一个特殊字符。有什么方法可以预防吗?
这是我的搜索代码(我也尝试在没有标志的情况下调用它,但没有帮助):
searchTerm = '*' + searchTerm + '*';
var folderManager = new FolderManager(_siteConfig);
var indexFileLocation = Path.Combine(folderManager.GetFolderPath(Folder.FullTextIndexes), indexFolder);
var searchJob = new SearchJob
{
TimeoutSeconds = DTSEARCH_TIMEOUT_SECONDS,
SearchFlags = SearchFlags.dtsSearchWantHitDetails | SearchFlags.dtsSearchWantHitsByWord | SearchFlags.dtsSearchWantHitsArray,
Request = searchTerm
};
searchJob.IndexesToSearch.Add(indexFileLocation);
searchJob.Execute();
//searchJob.Results.Count always equals to 0 when searchTerms has "-A" postfix
这是我创建索引的代码
private IndexJob GetJob(..., statusHandler)
{
var indexPath = ...;
var logFilePath = ...;
var indexJob = new IndexJob();
indexJob.IndexPath = indexPath;
indexJob.ActionCreate = true;
indexJob.ActionAdd = true;
indexJob.IndexingFlags = IndexingFlags.dtsIndexCacheText |
IndexingFlags.dtsIndexCacheOriginalFile |
IndexingFlags.dtsAlwaysAdd |
IndexingFlags.dtsIndexKeepExistingDocIds;
indexJob.StoredFields.Add("UserDisplayName");
indexJob.StoredFields.Add("UserDescription");
indexJob.DataSourceToIndex = ...;
indexJob.StatusHandler = statusHandler;
SetIndexJobOptions();
return indexJob;
}
private void SetIndexJobOptions()
{
var options = new Options();
options.FieldFlags = FieldFlags.dtsoFfSkipFilenameField | FieldFlags.dtsoFfOfficeSkipHiddenContent | FieldFlags.dtsoFfXmlSkipAttributes | FieldFlags.dtsoFfSkipFilenameFieldPath;
options.BinaryFiles = BinaryFilesSettings.dtsoIndexBinaryNoContent;
options.TextFlags = TextFlags.dtsoTfRecognizeDates;
options.Save();
}
DtSearch 引擎版本为 7.96 (Build 8668)