Конфигурация Solr для оцениваемого поиска

Я пытаюсь настроить индекс Solr для поиска в базе данных информации о продукте. Для этой цели я заполнил базу данных сведений о продукте и использовал Solr 6.0.0. Для данной детали продукта (название, бренд, другие ключевые слова) я хотел бы знать, есть ли в базе данных продукт, который точно соответствует заданным данным. Я начал импорт данных и создал файл index. Однако, когда я ищу, оценки соответствующего продукта одинаковы, несмотря на то, что продукты в списке разные. Я пробовал использовать различные комбинации ключевых слов для поиска, но результат во всех случаях был одинаковым. Я также пробовал использовать различные токенизаторы и фильтры.

Пример schema.xml, который я пробовал:

<?xml version="1.0" encoding="UTF-8" ?>

<schema name="example" version="1.5">
 <field name="id" type="Int"  indexed="true" stored="true"/>
  <field name="name" type="text_general"  indexed="true" stored="true" />
  <field name="brand" type="text_general"  indexed="true" stored="true"/>
  <field name="category" type="text_general"  indexed="true" stored="true"/>
  <field name="description" type="text_general" indexed="true" stored="true" /> 
  <field name="catchall" type="text_general" indexed="true" stored="true" multiValued="true" />
    <copyField source="id" dest="catchall" />
    <copyField source="name" dest="catchall" />
    <copyField source="brand" dest="catchall" />
    <copyField source="category" dest="catchall" />
    <copyField source="description" dest="catchall" />
    <uniqueKey>id</uniqueKey>
    <defaultSearchField>catchall</defaultSearchField>
    <types>
        <fieldtype name="string" class="solr.StrField" sortMissingLast="true" />
        <fieldtype name="Int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
        <fieldtype name="text_general" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
            <charFilter class="solr.HTMLStripCharFilterFactory"/>
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1" 
                    splitOnNumerics="1"
                    splitOnCaseChange="1"
                    generateNumberParts="1"
                    catenateWords="0"
                    catenateNumbers="0"
                    catenateAll="0"
                    preserveOriginal="1"
                    />

            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.ICUFoldingFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
          <analyzer type="query">
            <charFilter class="solr.HTMLStripCharFilterFactory"/>
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1" 
                    splitOnNumerics="1"
                    splitOnCaseChange="1"
                    generateNumberParts="1"
                    catenateWords="0"
                    catenateNumbers="0"
                    catenateAll="0"
                    preserveOriginal="1"
                    />
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.ICUFoldingFilterFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
        </fieldtype>
        <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
    </types>
</schema>

Изменить

Определение объекта из data-config.xml приведено ниже.

<entity name="master_products"  
    pk="id"
    query="select p.* ,b.*  from master_products p ,master_brands b  where b.id=p.brand_id"
    deltaImportQuery="SELECT * FROM master_products WHERE product_name='${dataimporter.delta.product_name}' "
    >
    <!-- or b.brnad='${dataimporter.delta.brand}' -->

     <field column="product_name" name="name"/> 
     <field column="product_description" name="description"/> 
     <field column="id" name="id"/>
     <field column="mrp" name="mrp"/> 
     <field column="brand" name="brand"/>


  <entity name="master_brands" 
    query="select * from master_brands"
    deltaImportQuery="select * from master_brands where id ={master_products.brand_id}" processor="SqlEntityProcessor" cacheImpl="SortedMapBackedCache" >

  </entity>

  <entity name="master_product_categories" 
    query="select * from master_product_categories"
    deltaImportQuery="select * from master_product_categories where id ={master_products.   product_category_id}" processor="SqlEntityProcessor" cacheImpl="SortedMapBackedCache" >
    <field column="category" name="category" />
  </entity>

 </entity> 

Изменить Запрос выглядит следующим образом.

http://localhost:8983/solr/myproducts/select?fl=* score&fq=brand:Nikon&fq=mrp:28950*&indent=on&q=name:*"Nikon D3200 (Black) DSLR with  AF-S 18-55mm VR Kit Lens"*&wt=json

Я хотел бы помочь в достижении моей цели. Не могли бы вы указать мне, как создать правильную конфигурацию, которая соответствовала бы моей цели? Заранее спасибо.


person Anju    schedule 09.06.2016    source источник
comment
Как вы запрашиваете индекс?   -  person MatsLindh    schedule 09.06.2016
comment
сообщение было обновлено с деталями запроса.   -  person Anju    schedule 10.06.2016
comment
Но вы не показываете, что такое запрос (какие настройки при извлечении документов), а только то, как вы импортируете данные. Запрос обычно является важной частью, когда речь идет о подсчете очков.   -  person MatsLindh    schedule 10.06.2016
comment
сообщение было обновлено с деталями запроса   -  person Anju    schedule 10.06.2016


Ответы (1)


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

Запросы диапазона [a TO z], префиксные запросы a* и запросы с подстановочными знаками a*b имеют постоянную оценку (все совпадающие документы получают одинаковую оценку). Факторы оценки tf, idf, повышение индекса и координата не используются. Количество совпадающих терминов не ограничено (как это было в прошлых версиях Lucene).

fq условия не влияют на оценку, они просто фильтруют набор результатов.

person MatsLindh    schedule 10.06.2016