Как определить тип поля для индексации SOLR?

Я просто хочу добавить к уже принятому ответу. Я застрял на этом, но я пошел по другому пути обработки полного события. Вместо того, чтобы бежать, я добавляю обработчик к задаче.

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;
}

С помощью этого маршрута все обработки уже сделанный для вас, когда задача отменяется, он просто запускает обработчик события, и вы можете видеть, был ли он отменен там.

16
задан memnoch_proxy 22 January 2010 в 18:52
поделиться

1 ответ

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]

в условиях запроса. (Есть много способов поиска диапазонов, я представляю метод, который использует целые числа вместо класса даты.)

29
ответ дан 30 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: