多くの 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 (ビルド 8668)