'Search a port with a particular `product`. It is (much)
better to provide the `service` name and/or `port` number
since those fields are indexed.'

@classmethod
def searchproduct(cls, product, version=None, service=None, port=None, protocol=None):

    req = cls._searchstring_re(Port.service_product, product)
    if (version is not None):
        req = and_(req, cls._searchstring_re(Port.service_version, version))
    if (service is not None):
        req = and_(req, cls._searchstring_re(Port.service_name, service))
    if (port is not None):
        req = and_(req, (Port.port == port))
    if (protocol is not None):
        req = and_(req, (Port.protocol == protocol))
    return NmapFilter(port=[(True, req)])
