首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阔叶树中的solr查询

阔叶树中的solr查询
EN

Stack Overflow用户
提问于 2013-06-07 10:05:13
回答 1查看 1.7K关注 0票数 1

我对Solr和布罗德利夫很陌生。

我在布罗德利夫工作,因为他们使用solr搜索。这是非常好的和工作的条件。产品表现在有类别字段和阔叶搜索,根据需要,我扩展了产品表,并使用公司id创建了新的表,因此在我的ExtendedProduct表中有两个字段companyId和productId(fk带产品表),现在我也想通过companyId获得产品列表。

我们的schema.xml文件如下

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
    <fields>
        <field name="namespace" type="string" indexed="true" stored="false" />
        <field name="id" type="string" indexed="true" stored="true" />
        <field name="productId" type="long" indexed="true" stored="true" />
        <field name="category" type="long" indexed="true" stored="false" multiValued="true" />
        <field name="explicitCategory" type="long" indexed="true" stored="false" multiValued="true" />
        <field name="searchable" type="text_general" indexed="true" stored="false" />
        <dynamicField name="*_searchable" type="text_general" indexed="true" stored="false" />

        <dynamicField name="*_i" type="int" indexed="true" stored="false" />
        <dynamicField name="*_is" type="int" indexed="true" stored="false" multiValued="true" />
        <dynamicField name="*_s" type="string" indexed="true" stored="false" />
        <dynamicField name="*_ss" type="string" indexed="true" stored="false" multiValued="true" />
        <dynamicField name="*_l" type="long" indexed="true" stored="false" />
        <dynamicField name="*_ls" type="long" indexed="true" stored="false" multiValued="true" />
        <dynamicField name="*_t" type="text_general" indexed="true" stored="false" />
        <dynamicField name="*_txt" type="text_general" indexed="true" stored="false" multiValued="true" />
        <dynamicField name="*_b" type="boolean" indexed="true" stored="false" />
        <dynamicField name="*_bs" type="boolean" indexed="true" stored="false" multiValued="true" />
        <dynamicField name="*_d" type="double" indexed="true" stored="false" />
        <dynamicField name="*_ds" type="double" indexed="true" stored="false" multiValued="true" />
        <dynamicField name="*_p" type="double" indexed="true" stored="false" />

        <dynamicField name="*_dt" type="date" indexed="true" stored="false" />
        <dynamicField name="*_dts" type="date" indexed="true" stored="false" multiValued="true" />

        <!-- some trie-coded dynamic fields for faster range queries -->
        <dynamicField name="*_ti" type="tint" indexed="true" stored="false" />
        <dynamicField name="*_tl" type="tlong" indexed="true" stored="false" />
        <dynamicField name="*_td" type="tdouble" indexed="true" stored="false" />
        <dynamicField name="*_tdt" type="tdate" indexed="true" stored="false" />
    </fields>

    <uniqueKey>id</uniqueKey>

    <types>
        <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
        <fieldType name="string" class="solr.StrField" sortMissingLast="true" />

        <!-- boolean type: "true" or "false" -->
        <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" />

        <!-- Default numeric field types. For faster range queries, consider the 
            tint/tlong/tdouble types. -->
        <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0" />
        <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0" />
        <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0" />

        <!-- Numeric field types that index each value at various levels of precision 
            to accelerate range queries when the number of values between the range endpoints 
            is large. See the javadoc for NumericRangeQuery for internal implementation 
            details. Smaller precisionStep values (specified in bits) will lead to more 
            tokens indexed per value, slightly larger index size, and faster range queries. 
            A precisionStep of 0 disables indexing at different precision levels. -->
        <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0" />
        <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0" />
        <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0" />

        <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, 
            and is a more restricted form of the canonical representation of dateTime 
            http://www.w3.org/TR/xmlschema-2/#dateTime The trailing "Z" designates UTC 
            time and is mandatory. Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z 
            All other components are mandatory. Expressions can also be used to denote 
            calculations that should be performed relative to "NOW" to determine the 
            value, ie... NOW/HOUR ... Round to the start of the current hour NOW-1DAY 
            ... Exactly 1 day prior to now NOW/DAY+6MONTHS+3DAYS ... 6 months and 3 days 
            in the future from the start of the current day Consult the DateField javadocs 
            for more information. Note: For faster range queries, consider the tdate 
            type -->
        <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0" />

        <!-- A Trie based date field for faster date range queries and date faceting. -->
        <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0" />

        <!-- A general text field that has reasonable, generic cross-language defaults: 
            it tokenizes with StandardTokenizer and down cases. -->
        <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
            </analyzer>
            <analyzer type="query">
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
            </analyzer>
        </fieldType>

    </types>
</schema>

solrConfig.xml文件看起来就像

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <abortOnConfigurationError>${solr.abortOnConfigurationError:true} </abortOnConfigurationError>
    <luceneMatchVersion>LUCENE_40</luceneMatchVersion>
    <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}" />
    <updateHandler class="solr.DirectUpdateHandler2" />

    <query>
        <maxBooleanClauses>1024</maxBooleanClauses>

        <filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0" />
        <queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0" />
        <documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0" />

        <enableLazyFieldLoading>true</enableLazyFieldLoading>

        <queryResultWindowSize>20</queryResultWindowSize>
        <queryResultMaxDocsCached>200</queryResultMaxDocsCached>

        <listener event="newSearcher" class="solr.QuerySenderListener" />
        <listener event="firstSearcher" class="solr.QuerySenderListener">
            <arr name="queries">
                <lst>
                    <str name="q">static firstSearcher warming in solrconfig.xml</str>
                </lst>
            </arr>
        </listener>

        <useColdSearcher>false</useColdSearcher>
        <maxWarmingSearchers>2</maxWarmingSearchers>
    </query>

    <requestDispatcher>
        <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000" />
        <httpCaching never304="true" />
    </requestDispatcher>

    <requestHandler name="/select" class="solr.SearchHandler">
        <lst name="defaults">
            <str name="echoParams">explicit</str>
            <int name="rows">4</int>
            <str name="df">name_t</str>
        </lst>
    </requestHandler>

    <requestHandler name="/update" class="solr.UpdateRequestHandler" />
    <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
    <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler" startup="lazy" />

    <queryResponseWriter name="json" class="solr.JSONResponseWriter">
        <str name="content-type">text/plain; charset=UTF-8</str>
    </queryResponseWriter>

</config>

现在,在阔叶树中,他们正在查询类别:2023。下面是类似于q=category%3A2003&fl=id&rows=15&fq=namespace%3Ad&start=0的SolrQuery.toString

我仍然找不出表名是如何配置到这个位置的。

我也想找到companyId的产品,我应该做哪些改变来做到这一点?

谢谢你,安吉

EN

回答 1

Stack Overflow用户

发布于 2013-06-07 15:53:52

这方面的主要文档链接位于http://docs.broadleafcommerce.org/current/Catalog-and-Search.html

以下是其中的要点:

动态场 这些字段由用户通过blc_field和blc_field_search_types中的数据库条目指定。在我们讨论字段中到底发生了什么之前,我们必须先讨论Solr中的动态字段是什么。如果打开schema.xml,您将看到许多不同字段的列表。以下是一段简短的节选: 在这里,我们定义了几个动态字段。例如,如果我们要创建一个名为manufactuer_s的字段,它将由Solr作为一个Solr.StrField进行索引。 另一个重要的区别是FieldImpl中的两个属性: searchableFieldTypes和facetFieldType。可搜索字段类型将内置到Solr索引中,其中可能有多个类型。例如,您可能希望将字段索引为字符串字段和文本字段(文本字段允许部分匹配)。但是,您只想在String字段上使用facet。“阔叶树场”的实现给了您这种自由。还请注意,facet字段还控制用于排序的Solr索引。 作为一个简单的例子,让我们看看如果定义了以下字段,可能会发生什么情况: 制造商,facetFieldType:"s",searchableFieldTypes:{ "s","t“} defaultSku.retailPrice,facetFieldType:"d”defaultSku.name,facetField:"s",searchableFieldTypes:{ "s","t“}。JSON中合适的Solr表示形式是: { id : 100,类别:2000年,2002年,manufacturer_s:“香料交换”, manufacturer_t:“香料交换”, defaultSku.retailPrice_d : 6.99,defaultSku.name_s:“死苏格兰帽热酱油日”,defaultSku.name_t:“死苏格兰帽热酱日”,搜索:“死苏格兰杯热酱交换日”} 你可能想知道那个可搜索的字段是什么。当您将字段指定为可搜索字段时,我们将将该字段的值复制到solr索引字段可搜索。当我们稍后进行查询时,它们将针对此字段。 我们将很快回到这里,看看排序、搜索和面形处理是如何针对这个产品工作的。

因此,基本上,您在BLC_FIELD (即FieldImpl Java类)中定义了一个条目,该条目为propertyName字段提供了“companyId”。从项目中的load_catalog_data.sql中,可以导入“制造商”字段以便在其上进行搜索:

代码语言:javascript
复制
INSERT INTO BLC_FIELD (FIELD_ID, ENTITY_TYPE, PROPERTY_NAME, ABBREVIATION, SEARCHABLE, FACET_FIELD_TYPE) VALUES (1, 'PRODUCT', 'manufacturer', 'mfg', 1, 's');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16981467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档