Я просто хочу добавить к уже принятому ответу. Я застрял на этом, но я пошел по другому пути обработки полного события. Вместо того, чтобы бежать, я добавляю обработчик к задаче.
Comments.AsAsyncAction().Completed += new AsyncActionCompletedHandler(CommentLoadComplete);
Где обработчик событий выглядит так
private void CommentLoadComplete(IAsyncAction sender, AsyncStatus status )
{
if (status == AsyncStatus.Canceled)
{
return;
}
CommentsItemsControl.ItemsSource = Comments.Result;
CommentScrollViewer.ScrollToVerticalOffset(0);
CommentScrollViewer.Visibility = Visibility.Visible;
CommentProgressRing.Visibility = Visibility.Collapsed;
}
С помощью этого маршрута все обработки уже сделанный для вас, когда задача отменяется, он просто запускает обработчик события, и вы можете видеть, был ли он отменен там.
1. Схема
Ваша схема Solr очень определяется вашим предполагаемым поведением поиска. В вашем файле Schema.xml вы увидите кучу вариантов, таких как «Text» и «String». Они ведут себя по-разному.
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
Тип строки поля является буквальным спичером. Это будет работать как ==
в операторе SQL.
<fieldtype name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldtype>
Тип поля Text_WS делает токенизацию. Однако большая разница в поле Text
- это фильтры для стоп-слов и разделителей и нижний корпус. Обратите внимание, как эти фильтры обозначены как для индекса Lucene, так и для запроса Solr. Таким образом, при поиске текстового поля он адаптирует термины запроса, используя эти фильтры, чтобы помочь найти совпадение.
<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter ..... />
<filter ..... />
<filter ..... />
</analyzer>
</fieldtype>
При индексации таких вещей, как новостные истории, например, вы, вероятно, хотите искать названия компаний и заголовки по-разному.
<field name="headline" type="text" />
<field name="coname" type="string" indexed="true" multiValued="false" omitNorms="true" />
Приведенный выше пример позволит вам сделать поиск & Coname: Intel & Readhline: процессор + спецификации
и извлечение совпадений, ударяя розничные истории Intel.
Если вы хотите найти диапазон
2. Поля результатов
Вы можете определить стандартный набор возвратных полей в вашем RequestHandler
<requestHandler name="mumble" class="solr.DisMaxRequestHandler" >
<str name="fl">
category,coname,headline
</str>
</requestHandler>
, вы также можете определить нужные поля в вашей строке запроса, используя параметр FL
:
/select?indent=on&version=2.2&q=coname%3AIn*&start=0&rows=10&fl=coname%2Cid&qt=standard
Вы также можете выбирать диапазоны в вашем запросе с использованием поля : [x to *]
синтаксис. Если вы хотите выбрать определенные объявления по дату, вы можете создать запрос с
ad_date:[20100101 TO 20100201]
в условиях запроса. (Есть много способов поиска диапазонов, я представляю метод, который использует целые числа вместо класса даты.)