Код вопроса в этой строке:
newPtr = &dep;
Вы должны изменить его на
*newPtr = dep;
, поскольку dep
определено в буфере стека, после выполнения функции generateProcessDeparture
, буфер стека будет перезаписан.
Можно использовать другой анализатор при поиске, чем тот, с которым Вы создали индекс.
Попытайтесь использовать KeywordAnalyzer при поиске. Это создаст единственный маркер строки поиска, которая является, вероятно, что Вы ищете.
Я предполагаю здесь - делает exactMask
добавить кавычки вокруг строки? Необходимо просто использовать строку "грузовик Mercedes", не управляя им.
new TermQuery(new Term("companyName", "mercedes trucks"));
Вы рассмотрели использование PhraseQuery? Поле должно не маркироваться? Я верю немаркируемый, для идентификаторов и т.д. а не для полей, имеющих несколько слов как их содержание.
Даже у меня такая же проблема. Чтобы избавиться от этой проблемы, необходимо сделать следующее. 1) При добавлении значения поля в документ удалите пробелы между ними. 2) Сделайте значение поля в нижнем регистре. 3) Сделайте поисковый текст строчными буквами. 4) Уберите пробелы в поисковом тексте. С уважением ~ шеф
Используйте PhraseQuery следующим образом:
//create the query objects
BooleanQuery query = new BooleanQuery();
PhraseQuery q2 = new PhraseQuery();
//grab the search terms from the query string
string[] str = Sitecore.Context.Request.QueryString[BRAND_TERM].Split(' ');
//build the query
foreach(string word in str)
{
//brand is the field I'm searching in
q2.Add(new Term("brand", word.ToLower()));
}
//finally, add it to the BooleanQuery object
query.Add(q2, BooleanClause.Occur.MUST);
//Don't forget to run the query
Hits hits = searcher.Search(query);
Надеюсь, это поможет!
Возможно, замените:
mercedes trucks
на
mercedes?trucks
Работает для меня.